总结
这道题目一上来我就想得是用整数型数据来读取n,但是后来才发现n太大了超出了int得范围,后来去搜了题解,发现是用字符串,看了一遍别人得题解,照着敲了下来还是出现了报错,对比了半天才发现是case后面忘记使用break了。对于C得基础语法有点陌生,有待加强!
这个代码参考了别人得题解。
#include<stdio.h>
#include<string.h>
int main()
{
int sum = 0; //求和变量
char ch;
//每次读入一个数字
ch = getchar();
//第一部分对输入的字符数字进行求和
while(ch != '\n'){
switch(ch){
case '1':
sum += 1;
break;
case '2':
sum += 2;
break;
case '3':
sum += 3;
break;
case '4':
sum += 4;
break;
case '5':
sum += 5;
break;
case '6':
sum += 6;
break;
case '7':
sum += 7;
break;
case '8':
sum += 8;
break;
case '9':
sum += 9;
break;
default:
sum += 0;
break;
}//of switch
ch = getchar();
}//of while
//第二部分,将求和结果用拼音表示,注意这里是倒叙存储!
char *result[100];
int digit_count=0; //指针数组下标
int digit; // 记录数字
while(sum != 0){
digit = sum % 10;
switch(digit)
{
case 0:
result[digit_count] = "ling";
break;
case 1:
result[digit_count] = "yi";
break;
case 2:
result[digit_count] = "er";
break;
case 3:
result[digit_count] = "san";
break;
case 4:
result[digit_count] = "si";
break;
case 5:
result[digit_count] = "wu";
break;
case 6:
result[digit_count] = "liu";
break;
case 7:
result[digit_count] = "qi";
break;
case 8:
result[digit_count] = "ba";
break;
case 9:
result[digit_count] = "jiu";
break;
default:
break;
}//of switch
sum = sum / 10;
digit_count++;
}//of while
//输出拼音结果
int i;
char output[100] = ""; //输出结果字符串
for(i=digit_count-1; i >= 0; i--){
if(i==0){
strcat(output,result[0]);
}
else{
char p[10];
strcpy(p, result[i]);
strcat(p," ");
strcat(output,p);
}
}// of for
printf("%s",output);
return 0;
}