题目
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;
}