1002 写出这个数 (20分)

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:

每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^100^。

输出格式:

在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

输入样例:

1
1234567890987654321123456789

输出样例:

1
yi san wu

思路:

首先看到输入的n是小于10^100^无论是int还是long long都存放不下这么大的整数,所以只能用字符串类型一个一个地读取,再利用 减去字符串0 的操作来得到当前输入的数字,用于累加每一位数字求和。关于求和之后如何读出这个数,这里我利用到了 vector容器 , 从数字的低位开始逐步push进入vector容器,然后再利用一个自定义的拼音数组,进行反向读取即可。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
string s;
cin >> s;
string a[15] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"}; //自定义的拼音数组,以便一一对应地读出来
vector<string> v; //存放总和拆分的数字
int sum = 0;
for (int i = 0; i < s.size(); i++)
{
sum += s[i] - '0'; //得到读入的数字
}

while (sum) //拆分sum,并push
{
v.push_back(a[sum % 10]);
sum /= 10;
}
for (int i = v.size() - 1; i >= 0; i--)
{
cout << v[i];
if (i) //注意最后一个拼音后面没有空格
cout << " ";
}

return 0;
}