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:-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
因为位数有限而且不多,就直接处理好了,h万和l(1-999)有类似的地方,注意空格的输出和ling的输出。
要对0这个输入特殊处理一下。
#include<iostream> #include<string> #include<cmath> using namespace std; string num[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; string unit[5]={"","Shi","Bai","Qian","Wan"}; int main() { int n; cin>>n; if(n==0) { cout<<"ling"; return 0; } if(n<0) cout<<"Fu "; n=abs(n); if(n/100000000) cout<<num[n/100000000]<<" Yi"; bool f=n/100000000; n=n%100000000; if(n&&f) cout<<" "; int h=n/10000; bool f0=!f; int op=1000; int cnt=3; while(h) { if(h/op) { cout<<num[h/op]; f0=false; if(cnt) cout<<" "<<unit[cnt]; if(h%op) cout<<" "; } else if(!f0) { cout<<"ling "; f0=true; } h=h%op; op=op/10; cnt--; } if(n/10000) cout<<" Wan"; int l=n%10000; if(l&&n/10000) cout<<" "; f0=!(f||n/10000); op=1000; cnt=3; while(l) { if(l/op) { cout<<num[l/op]; f0=false; if(cnt) cout<<" "<<unit[cnt]; if(l%op) cout<<" "; } else if(!f0) { cout<<"ling "; f0=true; } l=l%op; op=op/10; cnt--; } }