读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式: 每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10 100 。
输出格式: 在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
1
#include <stdio.h>
2
#include <
string
.h>
3
#define
N 1000
4
5
void
read(
int
sum);
//
读出函数声明
6
7
int
main()
8
{
9
char
str[N];
//
要输入一个小于1000位的数字,显然不能用int,在这里定义一个str字符数组接收输入的数字
10
gets(str);
//
使用gets输入这个全是数字的字符串
11
int
len;
//
len表示str字符串的长度(也就是数字的个数)
12
len = strlen(str);
//
使用strlen函数可以直接测出len的大小
13
int
i, sum =
0
;
//
sum为各位数字的和
14
for
(i =
0
;i < len;i++) {
//
从第一个数字开始遍历到最后一个数字
15
sum += str[i] -
'
0
'
;
//
因为str为字符数组,所以str【i】-‘0’就等于str【i】数字的大小
16
}
17
18
read(sum);
//
读出函数
19
20
return
0
;
21
}
22
23
void
read(
int
sum)
//
读出函数
24
{
25
int
i;
26
//
因为下面要算sum的每位数的大小,mask为10的(sum的位数(几位数)次方减一 )
27
//
如:sum为三位数,mask为10,sum/mask就等于sum的首位 ,现初始为一
28
int
mask =
1
;
29
int
t =
sum;
30
while
(t >
9
) {
//
t循环了sum的位数减一遍
31
t /=
10
;
32
mask *=
10
;
33
}
34
35
//
定义一个指针数组,数组中的每一个元素都是指针
36
char
*c[
10
] = {
"
ling
"
,
"
yi
"
,
"
er
"
,
"
san
"
,
"
si
"
,
"
wu
"
,
"
liu
"
,
"
qi
"
,
"
ba
"
,
"
jiu
"
};
37
//
循环sum的位数次,并输出每位
38
do
{
39
i = sum /
mask;
40
printf(
"
%s
"
,c[i]);
41
if
(mask >
9
) {
42
printf(
"
"
);
43
}
44
sum %=
mask;
45
mask /=
10
;
46
}
while
(mask >
0
);
47
}

