1082 Read Number in Chinese (25 分)
题意
给出一个整数,要求输出它的中文读法。
如“-123456789” 读作 “Fu yi Yi er Qian san Bai si Shi wu Wan liu Qian qi Bai ba Shi jiu”
“100800”读作“yi Shi Wan ling ba Bai”
思路
模拟,由于数字的位数很少,可以直接暴力求解。把数分为三组
个位到千位 | 万位到千万位 | 亿
转化为个位到千位的读法。判断各组的相对位置,第一组直接输出,第二组最后加个万,第三组加个亿。
注意数中的‘0’,一组内末尾的零不读,相连的零只读一个。注意0这个数,注意空格。
代码
#include<stdio.h>
#include<string.h>
char figure[12][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
char weight[12][10]={"","Shi","Bai","Qian","Wan","Yi"};
int main()
{
char number[20];
int len,star=0,flag=0;
scanf("%s",number);
len=strlen(number);
if(len==1&&number[0]=='0'){
printf("ling");
}else{
if(number[0]=='-'){
printf("Fu ");
star=1;
len-=1;
}
for(int i=star;i<star+len;i++){
if(i!=star&&number[i]!='0'){
printf(" ");
}
if(number[i]!='0'){
if(flag!=0){
printf("ling ");
flag=0;
}
printf("%s",figure[number[i]-'0']);
flag=0;
if((star+len-i-1)%4!=0){
printf(" %s",weight[(star+len-i-1)%4]);
}
}else{
if(flag==0){
// printf("ling");
flag++;
}
}
if((star+len-i)%4==1&&star+len-i>4){
printf(" %s",weight[(star+len-i)/4+3]);
flag=0;
}
}
}
return 0;
}