【Pat乙级】1002写出这个数
题目:
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
算法思路:
由于要算的是输入n的每位数字之和,所以可以用scanf的格式输入来控制每次读取的数字。用!=EOF(EOF表示输入空置)来判断输入是否终止。循环过程中将所读数字依次加和,存入和的数组中。然后,将数组中的每个元素与‘0’做差,可得出每个元素的数字,然后输出拼音数组的对应元素即可。
具体代码
#include<stdio.h>
#include<string.h>
int main()
{
int a, sum = 0;
while(scanf("%1d", &a) != EOF) //逐个读入数字,进行加和
{
sum += a;
}
// printf("%d", sum);
char he[4]; //因为输入小于10^100次方,所以值小于9*101即909,所以可以用长度为4的数组表示
sprintf(he, "%d", sum); //将数字转换为字符串,存入he数组中
char pinyin[10][5] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
for(int i=0; i<strlen(he); i++) //strlen判断数组实际存储元素大小
{
if(i!=0) printf(" ");
printf("%s", pinyin[he[i]-'0']); //字符串相减为数字,表示两个字符ascall码的差值
}
// printf("%s\n", he[3]);
// printf("%s", pinyin[he[3]-'0']);
printf("\n");
return 0;
}