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并复位)
注意 个 、万 和 亿是需要特别注意的(此题只考了个、万)
关于中国叫法的判断问题很琐碎,这里就不再说明
#include<cstdio>
#include<iostream>
#define ZERO 0
#define NONZERO 999
int main()
{
long long int n;
scanf("%lld",&n);
if(n<0)
{
printf("Fu ");
n = 0-n;
}
if(n==0)
{
printf("ling");
return 0;
}
if(n>=100000000)
{
int i=n/100000000;
if(i == 1)printf("yi Yi");
if(i == 2)printf("er Yi");
if(i == 3)printf("san Yi");
if(i == 4)printf("si Yi");
if(i == 5)printf("wu Yi");
if(i == 6)printf("liu Yi");
if(i == 7)printf("qi Yi");
if(i == 8)printf("ba Yi");
if(i == 9)printf("jiu Yi");
n=n-100000000*i;
if(n>0)printf(" ");
if(n==0)
{
printf("");
return 0;
}
}
int stack[20];
int top=-1;
int flag[20];
int mask=0;
while(n!=0)
{
stack[++top]=n%10;
if(stack[top] == 0)
{
flag[top]=ZERO;
mask=1;//有0出现
}
else flag[top]=NONZERO;
n = n/10;
}
// for(int i=top;i>=0;i--)printf("%d ",flag[i]);
// printf("\n");
//没有一位数是0
if(mask == 0)//没有0出现
for(int i=top;i>=0;i--)
{
if(i==0)//最后输出到个位数了
{
if(stack[i] == 1)printf("yi");
if(stack[i] == 2)printf("er");
if(stack[i] == 3)printf("san");
if(stack[i] == 4)printf("si");
if(stack[i] == 5)printf("wu");
if(stack[i] == 6)printf("liu");
if(stack[i] == 7)printf("qi");
if(stack[i] == 8)printf("ba");
if(stack[i] == 9)printf("jiu");
}
else//没有到个位数
{
if(stack[i] == 1)printf("yi ");
if(stack[i] == 2)printf("er ");
if(stack[i] == 3)printf("san ");
if(stack[i] == 4)printf("si ");
if(stack[i] == 5)printf("wu ");
if(stack[i] == 6)printf("liu ");
if(stack[i] == 7)printf("qi ");
if(stack[i] == 8)printf("ba ");
if(stack[i] == 9)printf("jiu ");
}
if(i==8)printf("Yi ");
if(i==7)printf("Qian ");
if(i==6)printf("Bai ");
if(i==5)printf("Shi ");
if(i==4)printf("Wan ");
if(i==3)printf("Qian ");
if(i==2)printf("Bai ");
if(i==1)printf("Shi ");
//i为个位数的时候不用输出 Ge
}
//有0出现
if(mask == 1)
{
if(top<=3)//没有超过万
{
int temp=0;//是否有0的标志位
for(int i=top;i>=0;i--)
{
if(i==top)//先打印第一位
{
if(stack[i] == 1)printf("yi");
if(stack[i] == 2)printf("er");
if(stack[i] == 3)printf("san");
if(stack[i] == 4)printf("si");
if(stack[i] == 5)printf("wu");
if(stack[i] == 6)printf("liu");
if(stack[i] == 7)printf("qi");
if(stack[i] == 8)printf("ba");
if(stack[i] == 9)printf("jiu");
if(i==3)printf(" Qian");
if(i==2)printf(" Bai");
if(i==1)printf(" Shi");
}
else if(stack[i]==0)temp=1;
else
{
if(temp ==1)
{
printf(" ling");
temp=0;
}
if(stack[i] == 1)printf(" yi");
if(stack[i] == 2)printf(" er");
if(stack[i] == 3)printf(" san");
if(stack[i] == 4)printf(" si");
if(stack[i] == 5)printf(" wu");
if(stack[i] == 6)printf(" liu");
if(stack[i] == 7)printf(" qi");
if(stack[i] == 8)printf(" ba");
if(stack[i] == 9)printf(" jiu");
if(i==3)printf(" Qian");
if(i==2)printf(" Bai");
if(i==1)printf(" Shi");
}
}
}
if(top>=4&&top<8)//超过万 不过E
{
int temp=0;//是否有0的标志位
for(int i=top;i>=0;i--)
{
if(i==top)//先打印第一位
{
if(stack[i] == 1)printf("yi");
if(stack[i] == 2)printf("er");
if(stack[i] == 3)printf("san");
if(stack[i] == 4)printf("si");
if(stack[i] == 5)printf("wu");
if(stack[i] == 6)printf("liu");
if(stack[i] == 7)printf("qi");
if(stack[i] == 8)printf("ba");
if(stack[i] == 9)printf("jiu");
// if(i==8)printf(" Yi");
if(i==7)printf(" Qian");
if(i==6)printf(" Bai");
if(i==5)printf(" Shi");
if(i==4)printf(" Wan");
if(i==3)printf(" Qian");
if(i==2)printf(" Bai");
if(i==1)printf(" Shi");
}
else
if(stack[i]==0)
{
temp=1;
if(i==4)printf(" Wan");
}
else
{
if(temp ==1)
{
printf(" ling");
temp=0;
}
if(stack[i] == 1)printf(" yi");
if(stack[i] == 2)printf(" er");
if(stack[i] == 3)printf(" san");
if(stack[i] == 4)printf(" si");
if(stack[i] == 5)printf(" wu");
if(stack[i] == 6)printf(" liu");
if(stack[i] == 7)printf(" qi");
if(stack[i] == 8)printf(" ba");
if(stack[i] == 9)printf(" jiu");
if(i==7)printf(" Qian");
if(i==6)printf(" Bai");
if(i==5)printf(" Shi");
if(i==4)printf(" Wan");
if(i==3)printf(" Qian");
if(i==2)printf(" Bai");
if(i==1)printf(" Shi");
}
}
}
}
}