PAT 1002 写出这个数 (字符串)

题目>>

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

输入格式:

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

输出格式:

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

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

思路>>

①题目给出的n是小于10的100次方的,很明显不能用int型或者long long 型来表示,10的100次方是一个101位的数,故考虑用字符数组来存放这个数。

②输入n后将每一位求和,注意字符转数字的方法:‘1’-‘0’=1.

③将sum从低位到高位存入int型数组(用字符数组会出错?),输出对应拼音。

 1 #include<bits/stdc++.h> 
 2 using namespace std;
 3 const int maxn=110;
 4 int main(){
 5     char n[maxn];
 6     scanf("%s",n);
 7     int len=strlen(n);
 8     int sum=0;
 9     for(int i=0;i<len;i++){
10         sum+=(n[i]-'0');
11     }
12     int k[10];
13     int j=0;
14     while(sum!=0){
15         k[j++]=sum%10;
16         sum/=10;
17     }
18     for(int i=j-1;i>=0;i--){
19         switch(k[i]){
20             case 0:printf("ling");break;
21             case 1:printf("yi");break;
22             case 2:printf("er");break;
23             case 3:printf("san");break;
24             case 4:printf("si");break;
25             case 5:printf("wu");break;
26             case 6:printf("liu");break;
27             case 7:printf("qi");break;
28             case 8:printf("ba");break;
29             case 9:printf("jiu");break;
30         }
31         if(i>0) printf(" ");
32     }
33 }

当然,也可以用字符数组来存放拼音。

 1 #include<bits/stdc++.h> 
 2 using namespace std;
 3 const int maxn=110;
 4 int main(){
 5     char n[maxn];
 6     scanf("%s",n);
 7     int len=strlen(n);
 8     int sum=0;
 9     for(int i=0;i<len;i++){
10         sum+=(n[i]-'0');
11     }
12     int k[10];
13     int j=0;
14     while(sum!=0){
15         k[j++]=sum%10;
16         sum/=10;
17     }
18     char num[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
19     for(int i=j-1;i>=0;i--){
20         printf("%s",num[k[i]]);
21         if(i>0) printf(" ");
22     }
23 }

 

 

上一篇:乙_1002 写出这个数


下一篇:1002 写出这个数 (20分)