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:-123456789Sample Output 1:
Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiuSample Input 2:
100800Sample Output 2:
yi Shi Wan ling ba Bai
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
vector<int> vec;
map<int, string> num2name;
map<int, string> bit2name;
string ans="";
void outPut(int istart, int iend, bool flag) {
bool zeros = false;
int cnt = 0;
if (istart-iend>=3)
cnt = 4;
else cnt = istart - iend + 1;
for (int i = istart; i >= iend; --i)
{
if (vec[i] == 0) {
zeros = true;
cnt--;
continue;
}
if(vec[i] >= 1 && vec[i] <= 9) {
if(zeros) {
//cout << " ling";
ans += " ling";
}
if(flag == false)
//cout << " " << num2name[vec[i]] << " " << bit2name[cnt];
ans += (" "+num2name[vec[i]] + " " + bit2name[cnt]);
else {
//cout << num2name[vec[i]] << " " << bit2name[cnt];
ans += (num2name[vec[i]] + " " + bit2name[cnt]);
flag = false;
}
zeros = false;
}
cnt--;
}
}
int main() {
int n;
cin >> n;
ans = "";
num2name[0] = "ling"; num2name[1]="yi"; num2name[2]="er";num2name[3]="san";
num2name[4]="si"; num2name[5]="wu"; num2name[6]="liu"; num2name[7]="qi";
num2name[8]="ba"; num2name[9] = "jiu";
bit2name[2]="Shi"; bit2name[3]="Bai"; bit2name[4]="Qian"; bit2name[5]="Wan";
bit2name[9]="Yi"; bit2name[1]="";
if (n == 0) ans = "ling";
if (n < 0) {
n = -n;
ans += "Fu ";
}
int cnt = 10;
while(n != 0) {
int tmp = n%cnt;
vec.push_back(tmp);
n = n/10;
}
//reverse(vec.begin(), vec.end());
if(vec.size() >= 9) {
ans += num2name[vec[vec.size()-1]];
//cout << " Yi";
ans += " Yi";
outPut(7, 4, false);
//cout << "Wan";
int len = ans.size()-1;
if (ans[len] == ' ')
ans += "Wan";
else
ans += " Wan";
outPut(3,0, false);
} else if (vec.size() > 4) {
outPut(vec.size()-1, 4, true);
int len = ans.size()-1;
if (ans[len] == ' ')
ans += "Wan";
else
ans += " Wan";
outPut(3,0, false);
} else {
outPut(vec.size()-1, 0, true);
}
if(ans[ans.size()-1] == ' ')
cout << ans.substr(0, ans.size()-1) << endl;
else cout << ans << endl;
return 0;
}