A-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:
-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
#include <string>
#include <iostream>
using namespace std;
int main(){
int m,n,i,j,k,x;
int w1[9]={},w[9]={};
string w2[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
string s[9]={{},"Shi","Bai","Qian","Wan","Shi","Bai","Qian","Yi"};
cin >> n;
if(n<0){
cout << "Fu ";
n=-n;
}
m=n;
if(m<10){
cout << w2[m];
return 0;
}
for(i=0;m>0;i++){
w[i]=m%10;
m/=10;
}
for(j=i-1;j>=0;j--){
if(w[j]!=0&&j==i-1){//对第一个数字、最后一个数字和中间数字的空格的处理不同
cout << w2[w[j]] << ' ' << s[j];
}else if(w[j]!=0&&j>0&&j<i-1){
cout << ' ' <<w2[w[j]] << ' ' << s[j];
}else if(w[j]!=0&&j==0){
cout << ' '<<w2[w[j]];
}
if(w[j]==0){
x=0;
while(w[j]==0){//删去中间连续的0,并记录个数
j--;
x++;
}
if(j+x>3&&j+x<9&&j<=3)cout << " Wan";//如果删除之前的数在‘万’以上,并且在删除之后在‘万’以下就输出一个‘万’
if(w[j+1]==0&&j>=0&&w[j]!=0)cout << " ling";//两个数中间有0,就输出一个‘ling’
j++;
}
}
return 0;
}
本文介绍了一个C++程序,用于将不超过9位的整数转换为传统中文读法。该程序能够正确处理负数和零的情况,例如-123456789读作“负一亿二千三百四十五万六千七百八十九”。文章通过实例演示了如何实现这一功能。
3360

被折叠的 条评论
为什么被折叠?



