分数:20
难度:⭐️⭐️⚝⚝⚝
知识点:
方法技巧:
运行限制
代码长度限制 | 16 KB |
---|---|
时间限制 | 400 ms |
内存限制 | 64 MB |
读入一个正整数 n n n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
每个测试输入包含 1 个测试用例,即给出自然数 n n n 的值。这里保证 n n n 小于 10100。
在一行内输出 n n n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
1234567890987654321123456789
yi san wu
输入的整数值远远超过int
的取值范围,应采用字符或字符串来处理输入的数字。
输入样例输入的整数 n n n 为1234567890987654321123456789。
各位数字求和1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 0 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 135
接下来,要用汉语拼音写出和的每一位数字。根据拼音的对应关系,0到9的拼音分别为ling, yi, er, san, si, wu, liu, qi, ba, jiu。
所以,135对应的拼音为输出样例中的yi san wu。
n
中的每一位数字,再计算每一位数字之和sum
;sum
的每一位数字,输出其对应的汉语拼音。n
的每一位数字字符c
,转换为对应的数字c-'0'
,同时累加求各位数字之和sum
,也可以直接输入字符串n
,再计算各个数字之和;printChinesePinyin
,用switch-case
将数字转换为对应的汉语拼音;一行中最后一个拼音数字后没有空格,否则会格式错误。
#include
//输出数字对应的汉语拼音
void printChinesePinyin(int digit) {
switch(digit) {
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;
}
}
//输出求和后的sum的每位数字
void output(int sum){
int i=0,flag=0;//flag标记是否输出空格
int digit[3];//记录求和后的每位数字
//从低位到高位取得sum的每一位数字记录在digit
while (sum) {
digit[i++] = sum % 10 ;
sum /= 10;
}
//输出数字
while(i>0){
if (flag) printf(" ");
else flag = 1;
printChinesePinyin(digit[--i]);
}
}
int main() {
int sum=0;
char c;
//循环读取n的每一位数字字符c,同时累加求各位数字之和sum,也可以读入字符串n,再计算各个数字之和
while((c=getchar())!='\n')
sum+=c-'0';
output(sum);//输出求和后的sum的每位数字
return 0;
}