1002 写出这个数
2019-01-02 本文已影响0人
飞白非白
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 pow(10,100)
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
源代码
#include <stdio.h>
int main()
{
// 每一个数由索引与其拼音关联起来
char map[10][4] = {"ling", "yi", "er",
"san", "si", "wu", "liu", "qi", "ba", "jiu"};
// sum用于保存、各个位之和
int sum = 0;
// 用于保存输入的每个数字字符
char input;
// 边输入边计算和
for (int i = 0; (input = getchar()) != '\n' && i < 101; i++)
{
// 注意是减去'0',而不是'\0'
sum = input - '0' + sum;
}
// printf("%d", sum);
// 最大有100个9,各个位数之和不超过900,故最多有三位
int firstNum = sum / 100;
int secondNum = (sum % 100) / 10;
int thirdNum = (sum % 100) % 10;
//第一位和第二位为0
if (firstNum == 0 && secondNum == 0)
{
printf("%s", map[thirdNum]);
}
// 第一位为0,第二位不为0
else if (firstNum == 0 && secondNum != 0)
{
printf("%s %s", map[secondNum], map[thirdNum]);
}
// 三位都不为0
else
{
printf("%s %s %s", map[firstNum], map[secondNum], map[thirdNum]);
}
return 0;
}
不足之处
题目规定最后一个拼音后面不能有空格,但由于我使用了字符数组,所以自带了一个空字符,为了不添加更多的代码所以没写完善,后面有时间再加吧