/*中文阅读数字对中间0的读法
输入一个整数代表一个人民币值,请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。
为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。
于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。*/
#include <stdio.h>
int main()
{
char ch[11];
int i,t;
for(i=0;i<10;i++)
ch[i]='a'+i;
int num,bit=0;
scanf("%d",&num);
if(num==0)//额外判断,0进不了主循环
{
printf("a");
return 0;
}
for(t=0;num>0;num/=10) //记录位数以及将其倒序
{
bit++;
t=(t*10+num%10);
}
char money[11]={'\0'};
//对每位代表的单位赋字符值
money[2]='S';
money[3]='B';
money[4]='Q';
money[5]='W';
money[6]='S';
money[7]='B';
money[8]='Q';
money[9]='Y';
int count=0;
while(t>0)
{
//重点!!!! :根据下面的if语句,只判断当前位不等于0时输出结果,但如果是2000008,中间的W就会丢失,需要在此时输出W。
if(bit==5&&t%10==0)
printf("W");
if(t%10!=0)
{
//初始化count,防止二次出现中间0。
count=0;
printf("%c%c",ch[t%10],money[bit]);
}
//重点!!!! :在位数大于5时,例如2000008 ,为两百万零五元->cBWai,若失去(bit<5)这个判断条件,就会成为cBaWi。
else if(count==0&&bit<5)
{
printf("a");
//count的作用:当出现多个0时,只输出一次“a”即可。
count++;
}
bit--;
t/=10;
}
return 0;
}
PTA7-23 币值转换题解
最新推荐文章于 2024-02-21 19:58:57 发布