1082 Read Number in Chinese (25 分)
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
#include<bits/stdc++.h>
using namespace std;
string number[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
int main() {
string num;
int flag1 = 0, flag2 = 0;
cin >> num;
if (num[0] == '-') {
printf("Fu ");
num.erase(num.begin());
}
if (num.size() == 1) {
printf("%s", number[num[0] - '0'].c_str());
return 0;
}
int i = 0, len = num.size() - 1;
stack<string> s;
while (i < num.size()) {
if (i >= 4 && !flag1) {
flag1 = 1;
s.push("Wan");
}
if (i == 8) s.push("Yi");
switch(i % 4) {
case 0 : {
if (num[len - i] != '0') {
s.push(number[num[len - i] - '0']);
flag2 = 1;
} else flag2 = 0;
break;
}
case 1 : {
if (num[len - i] != '0') {
s.push("Shi");
s.push(number[num[len - i] - '0']);
flag2 = 1;
} else if (flag2) {
s.push("ling");
flag2 = 0;
}
break;
}
case 2 : {
if (num[len - i] != '0') {
s.push("Bai");
s.push(number[num[len - i] - '0']);
flag2 = 1;
} else if (flag2) {
s.push("ling");
flag2 = 0;
}
break;
}
case 3 : {
if (num[len - i] != '0') {
s.push("Qian");
s.push(number[num[len - i] - '0']);
flag2 = 1;
} else if (flag2){
s.push("ling");
flag2 = 0;
}
break;
}
}
i++;
}
flag1 = 0;
while(!s.empty()) {
if (flag1) printf(" ");
else {
flag1 = 1;
}
printf("%s", s.top().c_str());
s.pop();
}
return 0;
}