您的位置:首页 > 其它

1002. 写出这个数 (20)PAT乙级真题

2017-10-31 17:19 288 查看


1002. 写出这个数 (20)


读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:

每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。

输出格式:

在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789

输出样例:
yi san wu

这题的数据n<10的100次方,即最后各位的数字总和最大是3位数。我一开始把所有数据都当成3位数处理的,数字翻

转有点小问题,后来加了判断位数的片段才AC,还有要注意最后结果为0的特殊情况,下面是我的代码,有点长···
#include<stdio.h>
#include<string.h>
int main(void)
{
int i=0,s=0,b,c;
char a[200];
gets(a);
while(a[200]!='\0')
{
s+=a-48;i++;
}
c=0;
if (s>99) //判断是否是3位数
{
s=( ((s%10)*100) + (((s-(s/100)*100)/10)*10) + (s/100)  );
c=2;
}
else
{
if(s>9) //判断是否是2位数,一位数就不用处理了
{
s=((s/10)+(s%10)*10);
c=1;
}
}
i=0;
if (s==0) printf("ling"); //判断0的特殊情况
do
{
b=s%10;s=s/10;
if ((b==0)&&(i!=0)) printf("ling");
else if (b==1) printf("yi");
else if (b==2) printf("er");
else if (b==3) printf("san");
else if (b==4) printf("si");
else if (b==5) printf("wu");
else if (b==6) printf("liu");
else if (b==7) printf("qi");
else if (b==8) printf("ba");
else if (b==9) printf("jiu");
if (i<c) printf(" ");
i++;
}while(i<=c);
putchar('\n');
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PAT