题目:
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
---------------------------------------------------------------------------------------------------
代码如下:
# include <stdio.h>
# include <stdlib.h>
int main () {
//将键入的一串数字存入字符数组同时计算各位数字之和
char ch[101];
int i = 0, count = 0, sum = 0;//count统计位数
while(1) {
if (scanf("%c", &ch[i]) != 1) printf ("输入错误!");//此处scanf有一个返回值,如果不写的话pta编译会报错
//但自己的编译器不报错。。。
//注意此处的循环结束条件
if (ch[i] >= '0' && ch[i] <= '9') {
switch (ch[i]) {
case '0':
sum += 0;
break;
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:
break;
}
i++;
count++;
}
else break;
}
//itoa()函数的用法:char *itoa(int value, char *string, int radix);
//将数字123转为“123”
char str[101];
itoa (sum, str, 10);//此处pta编译报错,我一直没弄明白,但自己的编译器不报错。
//将字符逐一转成拼音
for (i = 0; str[i] != '\0'; i++) {
switch (str[i]) {
case '0':
printf ("ling ");
break;
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:
break;
}
}
}
考点:
1.int型只有2^32个,long int只有2^64,所以本题只能用数组;
2.将键入的一串数字存入字符数组(char ch[ ])的方法,注意结束条件('\0'和'\n'都不行);
3.scanf有一个返回值,注意一下就行了,一般不会有问题;
4.itoa()函数的用法:char *itoa(int value, char *string, int radix);
5.switch的运用。