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

1002. 写出这个数 (20)

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

输入格式:

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

输出格式:

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

输入样例:
1234567890987654321123456789
输出样例:
yi san wu
这题的数据n<10的100次方,即最后各位的数字总和最大是3位数。我一开始把所有数据都当成3位数处理的,数字翻
转有点小问题,后来加了判断位数的片段才AC,还有要注意最后结果为0的特殊情况,下面是我的代码,有点长···
#include
#include
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

你可能感兴趣的:(PAT乙级)