git在这–>https://github.com/Tiandragon/PAT-Grade-B.git
1002 写出这个数 (20 分)
读入一个正整数 ,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 的值。这里保证 小于 。
输出格式:
在一行内输出 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
思路
用数组
把输入的每个数字都存入数组[0-->n-1],然后计算数组的和
然后用除10取余,除100取余......
递归????
int abc(int a) //用递归把各个位的数提出来
{
if(a>=10)
{
abc(a/10);
}
printf(“%d “,a%10);
}
得到各位数字作为接下来数组的下标
然后再用数组[0-9]存放拼音ling到jiu
switch
代码
#include <stdio.h> #include <math.h> #include <ctype.h> /*int abc(int a) //用递归把各个位的数提出来 { if(a>=10) { abc(a/10); } printf("%d ",a%10); }*/ int main() { int sum=0;//数组的和 char ch[10000];//能处理10^100以内的数 char pingyin[10][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; char *n=ch; //指针指向数组地址 scanf("%s",ch);//将字符串存入数组 //printf("%s\n", ch);//查看是否存入 do { sum=sum+(*n-'0');//将字符串数组转成整型数组并相加 n++;//指向下一个数字 }while(*n!='\0');//循环到结束符 //printf("%d\n", sum);//查看是否相加成功 //abc(sum); if(sum>999) { printf("%s ",pingyin[sum/1000]); printf("%s ",pingyin[sum%1000/100]);//百位 printf("%s ",pingyin[sum%1000%100/10]);//十位 printf("%s",pingyin[sum%1000%100%10]);//个位 } else if(sum>99) { printf("%s ",pingyin[sum/100]);//百位 printf("%s ",pingyin[sum%100/10]);//十位 printf("%s",pingyin[sum%100%10]);//个位 } else if(sum>9) { printf("%s ",pingyin[sum/10]);//十位 printf("%s",pingyin[sum%10]);//个位 } else { printf("%s",pingyin[sum]); } return 0; }
PTA提交结果
总结
输了输了,最后还是参考其他人的思路,因为无论如何之前求得的数字和都不会多过四位数,把最后的计算结果分成四段进行0~99;10~99;99~999;999~无穷