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
Caution:
Solution:
// Talk is cheap, show me the code
// Created by Misdirection 2021-08-23 11:47:31
// All rights reserved.
#include <iostream>
#include <vector>
using namespace std;
string digit[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
string level[4] = {"", "Shi", "Bai", "Qian"};
string pronounce(string &s){
string ans = "";
int pos = s.length() - 1;
// mo wei de ling bu du
while(pos >= 0 && s[pos] == '0') pos--;
while(pos >= 0){
if(s[pos] != '0') ans = digit[s[pos] - '0'] + " " + level[s.length() - pos - 1] + " " + ans;
else if(pos + 1 < s.length() && s[pos + 1] != '0') ans = digit[0] + " " + ans;
pos--;
}
while(ans[ans.length() - 1] == ' ') ans = ans.substr(0, ans.length() - 1);
return ans;
}
int main(){
string num, ans = "";
cin >> num;
bool isNeg;
if(num[0] == '-'){
isNeg = true;
num = num.substr(1);
}
else isNeg = false;
if(num.length() == 1){
if(isNeg) printf("Fu %s\n", digit[num[0] - '0'].c_str());
else printf("%s\n", digit[num[0] - '0'].c_str());
return 0;
}
string yiji, wanji, geji;
if(num.length() > 8){
ans = digit[num[0] - '0'] + " Yi ";
wanji = num.substr(1, 4);
geji = num.substr(5, 4);
if(pronounce(wanji) != "") ans = ans + pronounce(wanji) + " Wan " + pronounce(geji);
else ans = ans + pronounce(wanji) + pronounce(geji);
}
else if(num.length() > 4){
wanji = num.substr(0, num.length() - 4);
geji = num.substr(num.length() - 4, 4);
ans = pronounce(wanji) + " Wan " + pronounce(geji);
}
else ans = pronounce(num);
if(isNeg) printf("Fu %s\n", ans.c_str());
else printf("%s\n", ans.c_str());
return 0;
}