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

来源:互联网 发布:vue引入第三方js 编辑:程序博客网 时间:2024/06/06 15:01

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;}

原创粉丝点击