题目>>
读入一个正整数 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 }