解题思路:
根据题目可知,数字最大为 ,即最多有100位,那么数字之和最大为999,三位数足够表示。另外要注意判断输出首位的方法。剩下的问题就是存储各位数字已经逐个求和并用汉字输出。
可以用一个长度为100的数组储存,也可以直接用向量vecotr或者string,后者可以不用考虑长度的问题而且也有现成的函数返回其长度,可能编写代码相对简单,本次没有选择偷懒的办法,使用了数组来表示。
为了读取各位数字,以字符形式用getchar()每次读取一个字符,这里正常会想到用char数组,不过考虑到while循环读取时结束的文件尾条件,最后选择用int数组来实现(EOF= 而char的一般实现都是无符号)。注意代码中输出时的while循环,因为求和时最终从while循环出来的时候 i 比实际最后一个有效位大1,所以需要使用前减1。
源代码如下:
#include <stdio.h>
char word[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main()
{
int num[100]; //存储各位数字
int count=0; //统计数字位数
int sum=0; //各位数字之和
while((num[count++]=getchar())!=EOF&&num[count-1]!='\n') //以ascii字符格式循环读取数据
;
for(int i=0;i<count-1;++i) //对数字求和
sum+=num[i]-48;
int digit[3]={0,0,0};
int i=0;
while(sum){
digit[i++]=sum%10; //逆序存储,输出时反序输出
sum/=10;
}
while(i--){ //因为本身上一个while出来后i就比最后一位有效值大1
printf("%s",word[digit[i]]);
if(i) printf(" "); //输出空格
}
return 0;
}