PAT--1002. 写出这个数 (20)

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

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

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

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

题目要求解析: n的每位数看为一位数,一起进行求和。

例: n=555 5+5+5=15 输出显示 yi wu

 1 #include<stdio.h>
 2 #include<string.h>
 3 void turn(int sum);
 4 int main()
 5 {
 6     //n<10^100,则将n看成char型数组 
 7     char n[100];
 8     int i,length,sum;
 9     scanf("%s",n);
10     sum=0;
11     length=strlen(n);
12     for(i=0;i<length;i++)
13         sum+=n[i]-48;//字符“0-9”转数字“0-9” 0的ASCII码为48(十进制) 
14     turn(sum);
15     printf("\n");
16     return 0;
17 }
18 //数字和转换中文大写 
19 void turn(int sum)
20 {
21     int i,temp,cout=1;
22     i=sum;
23     do
24     {
25         i/=10;
26         cout*=10;
27      }while(i>10);
28     while(sum!=0)
29     {    if(sum>10)//和为二位数及以上 
30         {
31             temp=sum/cout;
32             sum%=cout;
33             cout/=10;
34         }
35         else//和为一位数 
36         {
37             temp=sum;
38             sum=0;
39         }
40         switch(temp)
41         {
42             case 0:printf("ling");break;
43             case 1:printf("yi");break;
44             case 2:printf("er");break;
45             case 3:printf("san");break;
46             case 4:printf("si");break;
47             case 5:printf("wu");break;
48             case 6:printf("liu");break;
49             case 7:printf("qi");break;
50             case 8:printf("ba");break;
51             case 9:printf("jiu");break;
52         }
53         if(sum>0)
54         printf(" ");
55     }
56  } 

 

posted @ 2017-06-29 23:02  Stranger115  阅读(148)  评论(0)    收藏  举报