题目:
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 1。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
思路:
- 刚开始想输入10100 这么个大数字用一个int类型绝对不够,怎么说也得要ull型,于是就先用ull型去试了,结果真的去世了。而且循环起来还挺麻烦,重点是反着来,最后走进一个死胡同。然后看了下别人的思路,采用了数组,学到了。
- 循环取余求和,循环取余得到的求和值再赋给索引数组。
- 反向输出索引数组。
代码:
1 #include <stdio.h> 2 3 int main() 4 { 5 char s[100]; 6 char name[][10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"}; 7 int sum = 0; 8 scanf("%s",s); 9 for(int i=0; s[i] != '\0'; i++) 10 { 11 sum = sum + (s[i] - '0'); 12 } 13 int asum[5]; //存储sum中的每个数 14 int j; 15 for(j=0; sum >= 10; j++) 16 { 17 asum[j] = sum % 10; 18 sum /= 10; 19 } 20 asum[j] = sum; //记录将sum中第一位数 21 while(j>=0) 22 { 23 if(j != 0) 24 printf("%s ", name[asum[j]]); 25 else 26 printf("%s\n",name[asum[j]]); 27 j--; 28 } 29 return 0; 30 }
总结
遇到超过整型特别大的数字考虑字符数组进行输入、存储等。