读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
关键之处:
- 用字符指针数组来存放字符串。
- 将字符串数字转换为阿拉伯数字,然后求和。
代码:
#include<stdio.h>
#define MAXN 1000 //虽然题目说是10^100,其实没有那么大。
/*用字符指针数组来存放拼音,每一个数组元素是一个字符指针,每个指针指向对应字符串*/
char *ch[] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
int main(void) {
char str[MAXN];
char *p;
int sum, a[MAXN], k, i;
gets(str);
/*遍历字符串,将字符数字转换为阿拉伯数字*/
sum = 0;
for ( p = str; *p; p++ )
sum += *p - '0';
/*将sum的各个位的数字存入数组a[]中*/
k = 0;
while ( sum ) {
a[k++] = sum % 10;
sum /= 10;
}
/*上面数组是通过取余倒过来存的,因此printf的时候从后开始。*/
printf("%s", ch[ a[k-1] ]); //先输出第一个,因为要行末不留空格。
for ( i = k-2; i >=0; i-- )
printf(" %s", ch[ a[i] ]);
return 0;
}