题目
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
把数字表达成中文发音。规则:
1、每4位后要补相应的亿、万;
2、每4位中的千、百、十如果数字不为0,则要补相应位的发音;
3、每4位中每当0出现在非0数字前时,需要补零的发音;
注意本身为0的特殊情况
代码:
#include <iostream> #include <string> using namespace std; int main() { string num[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; string wei[5]={"Shi","Bai","Qian","Wan","Yi"}; string data; //输入数据 cin>>data; int begin=0,end=data.size(),next; //起始位置,超尾,下一个4位数据的头 int flag=0; //是否中间出现0的标志 if(data[0]=='-') begin=1; if(end-begin<=1&&data[begin]=='0') //处理0的特殊情况 { cout<<"ling"; return 0; } if(data[0]=='-') //处理负号 cout<<"Fu"; while(begin<end) { next=end; while(next-4>begin) //取4位 next-=4; while(begin<next) //输出 { if(data[begin]-'0'>0) { if(flag==1) //补零 { cout<<" ling"; flag=0; } if(begin>0) //非零输出 cout<<" "; cout<<num[data[begin]-'0']; if(next-begin-2>=0) //输出个十百位 cout<<" "<<wei[next-begin-2]; } else flag=1; begin++; } if(end-next>0) //输出万亿 cout<<" "<<wei[(end-next)/4+2]; } return 0; }