思路分析:
注意0的处理,如100000001,100020;还有末尾空格的输出
#include"stdio.h"
#include<string>
#include<iostream>
#include <sstream>
using namespace std;
const int maxn = 20;
int main() {
ostringstream result;
int x, cnt = 0, n[15];
scanf("%d",&x);
bool wan_flag = false; //万位是否全部为0
if ((x % 100000000) / 10000 == 0) wan_flag = true;
if (x == 0) {
printf("ling\n");
return 0;
}
if (x < 0) {
x = (-1)*x;
printf("Fu ");
}
while (x > 0) {
n[cnt++] = x % 10;
x /= 10;
}
string num[10] = { "ling ","yi ","er ","san ","si ","wu ","liu ","qi ","ba ","jiu " };
string gra[10] = {"Shi ","Bai ","Qian ","Wan ","Yi " };
int i = cnt / 4;
int j = cnt - 1 - i * 4;
bool flag1 = false; //上一个输出为0记为true;
while (i >= 0) {
bool zero_flag = false; //判断是否输出0
for (; j>=0; j--) {
bool flag0 = false; //当前数为0记为true;
if (n[i * 4 + j] == 0) {
for (int temp_j = j; temp_j >= 0; temp_j--) {
if (n[i * 4 + temp_j] != 0) zero_flag = true;
}
flag0 = true;
}
if (n[i * 4 + j] == 0 && zero_flag==true && flag1==false) {
result << num[n[i * 4 + j]];
zero_flag = false;
flag1 = true;
}
else if (n[i * 4 + j] != 0) {
result << num[n[i * 4 + j]];
zero_flag = false;
flag1 = false;
}
if ((i * 4 + j) % 4 == 0) {
if (i ==2) result << gra[2 + i];
else if (i == 1 && wan_flag==false) result << gra[2 + i];
}
else if (flag0 == false) {
result << gra[j - 1];
}
}
i--;
j = 3;
}
string resultstr = result.str();
resultstr = resultstr.substr(0, resultstr.length() - 1); //将末尾的空格去掉
cout << resultstr << endl;
return 0;
}
Given an integer with no more than 9 digits, you are supposed to read it in the traditional Chinese way. Output Fu first if it is negative. For example, -123456789 is read as Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu. Note: zero (ling) must be handled correctly according to the Chinese tradition. For example, 100800 is yi Shi Wan ling ba Bai.
Input Specification:
Each input file contains one test case, which gives an integer with no more than 9 digits.
Output Specification:
For each test case, print in a line the Chinese way of reading the number. The characters are separated by a space and there must be no extra space at the end of the line.
Sample Input 1:
-123456789
Sample Output 1:
Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu
Sample Input 2:
100800
Sample Output 2:
yi Shi Wan ling ba Bai