1002
1002.写出这个数
![](https://images2017.cnblogs.com/blog/1123881/201711/1123881-20171102110701623-2006366749.png)
第一次代码:
#include<stdio.h>
int main(){
char a[100];
int i=0,sum=0,count=1;
scanf("%s",a);
while(a[i]!='\0'){
sum+=(a[i]-'0');
i++;
}
i=sum;
while(i){
i=i/10;
count*=10;
}
while(sum)(改为count>=10){
count/=10;
switch(sum/count){
case 1:printf("yi");break;
case 2:printf("er");break;
case 3:printf("san");break;
case 4:printf("si");break;
case 5:printf("wu");break;
case 6:printf("liu");break;
case 7:printf("qi");break;
case 8:printf("ba");break;
case 9:printf("jiu");break;
case 0:printf("ling");break;
}
if(sum>=10)(改为count>1)
printf(" ");
else
printf("\n");
sum%=count;
}
return 0;
}
运行结果:
![](https://images2017.cnblogs.com/blog/1123881/201711/1123881-20171102110631935-957698355.png)
错误的点:
(1)用sum来控制输出的循环,以及格式,忽略了sum=800,这样的情况,当第一次循环结束的时候sum=0,所以之后的两个“ling”也就无法输出显示了
此外若sum=805,第二次循环的时候,sum=5,所以输出的时候“lingwu”格式错误。
总的来说还是因为很久没有编程了,总体的概念还是不够全面。
(2)这里最好的处理办法其实是:
将sum先循环分解各个位数,将他们存储在一个int out[3]的一个数组里面然后用for循环将其输出(注意循环变量应该是从小到大)。
成功的试验(上面将错误的改正也是可以的,只是这个是我多番改正,试探到测试点2之后做的代码,努力的成果):
#include<stdio.h>
int main(){
char a[100],str[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int i=0,sum=0,count=1;
scanf("%s",a);
while(a[i]!='\0'){
sum+=(a[i]-'0');
i++;
}
i=sum;
while(i){
i=i/10;
count*=10;
}
while(count>=10){
count/=10;
printf("%s",str+(sum/count));
if(count>1)
printf(" ");
sum%=count;
}
return 0;
}