1002

1002.写出这个数

 

第一次代码:
#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; }
运行结果:

 

 错误的点:
(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;
}

 
posted @ 2017-11-02 11:22  ...X  阅读(230)  评论(1编辑  收藏  举报