题目详情
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
思路与总结:
- 属于简单模拟题----字符串处理
- 但这种题不一定做起来快因为每一种情况以及特判要搞清楚,主要是要思路清晰,想清楚再做不要埋头一顿敲结果搞得很乱。
- 要注意数字为0的情况:碰到0是不要马上输出,而要看它之后是否非零再输出
ling
,同时有个特殊位置:万位为零时如果之后的千位为非0,也不要输出ling
而是直接输出单位Wan
- 书上的参考答案有点繁琐,故不参考了
AC代码
#include<cstdio>
char shuzji[10][5] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
//char danwei[5][5] = {"Shi","Bai","Qian","Wan","Yi"} ;
bool tag = 0;
void Print_danwei(int i){
if(i == 8){printf(" Yi");}
else if(i == 4){printf(" Wan");}
else if(i == 7|| i==3){printf(" Qian");}
else if(i == 6|| i==2){printf(" Bai");}
else if(i == 5 || i==1){printf(" Shi");}
}
void Print_shuzi(int x){
if(tag){printf(" ");}
else{tag = 1;}
printf("%s",shuzji[x]);
}
int main()
{
int n;
scanf("%d",&n);
if(n<0){
printf("Fu");
n = -n;
tag = 1;
}
int ans[10] = {0};
int num = 0;
while(n!=0){
ans[num++]=n%10;
n = n/10;
}
for(int i=num-1; i>=0; i--){
if(ans[i]!=0){
Print_shuzi(ans[i]);
Print_danwei(i);
}
else if( i==4 ){//ans[i]==0 && i==4
printf(" Wan");
}
else if( ans[i-1]!=0 && i>0){
Print_shuzi(ans[i]); //即print: ling
}
}
if(num == 0){ //特判输入n = 0的情况
printf("ling");
}
return 0;
}