题目
给定一个不超过 9 位的整数,你应该用传统的中文方式阅读它.
如果是负数,则先输出 Fu。
例如,-123456789 读作 Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu。
注意:零(ling)必须按照中国传统正确处理。
例如,100800 读作 yi Shi Wan ling ba Bai。
输入格式
共一行,包含一个不超过 9 位的整数.
输出格式
输出给定数字的中文读法,注意结尾不能有多余空格。
输入样例1:
-123456789
输出样例1:
Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu
输入样例2:
100800
输出样例2:
yi Shi Wan ling ba Bai
解法:模拟
数字每四位分成一组:[个十百千] + 万/亿
如果当前数字>0,上一位数字为0,并且在同一组内,输出ling
如果一组内都是0,不输出万/亿
时间复杂度O(n),空间复杂度O(1)
#include <iostream>using namespace std;char a[10][5] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};char b[4][5] = {"", "Shi", "Bai", "Qian"};char c[3][5] = {"", "Wan", "Yi"};int num[10];int main() {int n;cin >> n;if (n < 0) {cout << "Fu ";n = -n;}else if (n == 0) {cout << "ling";}int cnt = 0;while (n) {num[cnt++] = n % 10;n /= 10;}bool flag = false;for (int i = cnt - 1; i >= 0; i--) {if (num[i] != 0) {flag = true;if (i + 1 < cnt && ((i + 1) % 4) != 0 && num[i + 1] == 0) {cout << "ling" << ' ';}cout << a[num[i]] << ' ';if (i % 4)cout << b[i % 4] << ' ';}if (i % 4 == 0 && flag) {cout << c[i / 4] << ' ';flag = false;}}return 0;}
