写出这个数
题目要求:
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
解题思路:
- 用字符数组存储数字。
- 用字符形式的数组减’0’即为该数字,故计算和非常容易。
- 用一个循环得出该数字的各个位的数,存到一个整形数组中。
- 用switch语句对应出拼音。
- 考虑最后一个拼音后没有空格,用一个if判断 。
注意:
数字上限位数为101位,各位数字之和的上限为9*101=909,由此可知最终得出的和最大位数为3 。
完整程序:
/*
【解题思路】
1.用字符数组存储数字
2.用字符形式的数组减'0'即为该数字,故计算和非常容易
3.用一个循环得出该数字的各个位的数,存到一个整形数组中
4.用switch语句对应出拼音
5.考虑最后一个拼音后没有空格,用一个if判断
*/
//【注意】数字上限位数为101位,各位数字之和的上限为9*101=909,也就是所最终得出的和最大位数为3
#include <stdio.h>
#include <string.h>
int main()
{
char str[101]; // 因为数字的上限为10的100次方,故最多位数为101位,将这个数字用字符串保存
scanf("%s",str);
int length,sum; // sum为各个位数字的和
length = strlen(str);
for(int i = 0;i < length;i ++)
sum += (str[i] - '0'); // 字符形式的数字减去0的ascii码等于该数字
int array[10]; // 最大位数为3,10绰绰有余,该数组用来存储sum的每一位数
int nCount = 0; // 记录sum的位数
for(int i = 0;i < 3;i ++) {
if(sum >= 1) {
array[i] = sum % 10; // 得出该数字的个位数,存到array[0]中
sum = (sum - array[i]) / 10; // 这样使得如234这样的数字变成23,下一次array[1]存的就是十位数字
nCount ++;
}
}
for(int i = nCount - 1;i >= 0;i --) {
switch(array[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;
}
if(i > 0) printf(" ");
}
return 0;
}