说在前面:
作为编程小白,拿到一个编程题,如果一时间没有很好的解题思路,可以去尝试把题目分解。
例如哪个地方需要一个读入哪个地方需要一个输出以及如何实现等,在我们手写的过程中就会认清这个题目要考我们的是什么。
我建议新手最好是去动手写一写题目的需求,这样不仅可以帮助我们理清解题思路还可以锻炼我们的编程思维,慢慢从手写→心写。
(不可操之过急,一步一个脚印)
先看题目:
输入样例:1234567890987654321123456789
输出样例:yi san wu
思路:
1.数值很大不能用常规int每位加和,然后switch。
2.所以采用数组将每一位以字符型读进数组。
3.将数组里每个数由字符型转化为整型并且加和。
4.想办法从高到低读出来。
上程序!
#include <stdio.h>
#include <string.h>
int main(){
char a [1000];
int b [50];
int i,length, sum = 0,digits,t,orig,j; //digits位数、orig是sum的替代品
digits = 0;
scanf("%[^\n]%*c", a);
char py[10][10] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; //拼音数组
length = strlen(a);
for(i = 0; i < length; i++){ //求出总和
sum += (a[i] - '0');
}
orig = sum ; //弄个替代品,便利后续使用
while (orig > 0) { //弄清sum是几位数
orig /= 10;
digits++;
}
for(t = 0; t < digits; t++){ //把和读进另外一个数组里面
b[t] = sum % 10;
sum /= 10;
}
printf("%s",py[b[t-1]]); //为符合格式先倒序输出第一位再循环按格式打印其他位数
for(i = t-2; i >= 0; i--)
printf(" %s",py[b[i]]);
return 0;
}
最初我的输入采用了gets,但是由于gets比较危险所以我就用了一个scanf的方法,
作为gets的替代方法大家可以自行百度一下,在这里就不详细讲解了。
(附上通过截图)
有问题可以评论区留言~

版权声明:本文为m0_57498103原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。