输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10的100次方。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
分析解题步骤:
- 首先得找到可以承载10的100次方的整数类型(发现并没有),所以只能另寻办法,尝试使用数组去读取数据。
- 假设使用的是数组,设置长度为100,再依次读入读取数字到数组当中。
- 递增的方式从数组当中累加数字,得到一个整体的数
- 再读取到一个新的数组,当读到最后一个数字的时候及换行输出
代码设计:
#include<stdio.h>
int main(void)
{
unsigned long int n;
int sum = 0; //用作读取数组时候的累加
// 使用getchar的方式去输入数字
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;
}
ch = getchar();
}
// 从总数去判断每一个位置该使用什么中文数字
int sum_num[10];
int k = -1;
while (sum != 0) {
k++;
sum_num[k] = sum % 10;
sum = sum /10;
}
while (k != -1) {
if (k == 0) {
switch (sum_num[k]) {
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;
default:
printf("ling");
}
k--;
break;
}
switch (sum_num[k]) {
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;
default:
printf("ling ");
}
k--;
}
}
遇到的问题:
- 对long类型的数据长度理解错误
- C语言中换行是使用"\n"而不是"/n"
- 在对sum_num(准备中文字符输出的数组)的存储进行错误的累加
1681

被折叠的 条评论
为什么被折叠?



