Problem Description
一天,一个小会计接到了一个重活,就是填写票据上的大写金额,这可把他忙得不可开交。
人民币大写金额的几条规则如下:
- 数字中 0~9 对应大写写法分别为:零壹贰叁肆伍陆柒捌玖(读音不变),且整个金额基本按照习惯上的读法来写。
- 数字金额上最高位为十位或十万位,且最高位上的数为「1」时,「壹」不可省略。如 15 元,大写金额格式为:壹拾伍元整。
- 数字金额中间有「0」时,大写金额要写「零」字。如 1024 元,大写金额格式为:壹仟零贰拾肆元整。
- 数字金额中间有连续的几个「0」时,大写金额中间只写一个「零」字,如 2008 元,大写金额格式为:贰仟零捌元整。
——相关规则摘自《正确填写票据和结算凭证的基本规定》,并根据题目需要稍作简化和修改
小会计从网上买到了一堆传说中能召唤出 ACMer 的「Accepted」标记,如果你能帮他完成数字金额转大写金额的任务,他会送给你一个的。
现在,他会提供给你数字金额,你只需要将转换后金额的拼音发给他就可以了。
Input
输入数据有多组(数据组数不超过 10000),到 EOF 结束。
每组数据输入一行,包含一个小于 1 亿的非负整数,代表要转换的数字金额。
Output
对于每组输入,输出一行,代表用拼音表示的转换后的大写金额。拼音之间用空格隔开。
Example Input
15 1024 2008 602333 9 7000999 10 1000
Example Output
yi shi wu yuan zheng yi qian ling er shi si yuan zheng er qian ling ba yuan zheng liu shi wan ling er qian san bai san shi san yuan zheng jiu yuan zheng qi bai wan ling jiu bai jiu shi jiu yuan zheng yi shi yuan zheng yi qian yuan zheng
Hint
#include<stdio.h>
#include<string.h>
int first;
char wei[][5]={"","shi","bai","qian","wan"};
char shu[][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
void print(char s[])
{
if(first==1) printf("%s",s);
else printf(" %s",s);
}
int main()
{
int number,a[20],jishu,zero,i;
while(scanf("%d",&number)!=EOF)
{
if(number==0)
{
printf("ling yuan zheng\n");
continue;
}
jishu=0;zero=0;first=1;
memset(a,0,sizeof(a));
while(number!=0)
{
a[jishu]=number%10;
number=number/10;
jishu++;
}
for(i=jishu-1;i>=0;i--)
{
if(a[i]==0) zero=1;
else
{
if(zero==1)
{
print(shu[0]);
zero=0;
}
print(shu[a[i]]);
if(first==1) first=0;
if(i%4!=0)print(wei[i%4]);
}
if(i==4) print(wei[4]);
}
printf(" yuan zheng\n");
}
return 0;
}