Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output every digit of the sum in English.
Input Specification:
Each input file contains one test case. Each case occupies one line which contains an N (≤10^100).
Output Specification:
For each test case, output in one line the digits of the sum in English words. 两个连续单词之间必须有一个空格, 但一行的末尾没有额外的空格。
Sample Input:
12345
Sample Output:
one five
注意事项:
(1)输入的数非常大,我们采用字符读取输入的格式存放数据
(2)加法计算无法采用算术运算的方式,我们可以自己设计加法计算过程
(3)用vector容器来存放数据,用iterator迭代器读取数据
(4)reverse_iterator迭代器可以逆序读取数据
(5)结尾不能有空格
PS:我看其他博主的文章大多数都没有考虑数据过大的情况,可能这个题目的评测点数值很小吧,不用我这么麻烦也可以过。
代码如下:
#include<bits/stdc++.h>
using namespace std;
string st[10] = {"zero" ,"one" ,"two" ,"three","four","five","six","seven","eight","nine" };
int main()
{
vector<char>num;
char c;
while ((c = getchar()) != '\n')
{
if(num.empty()) num.push_back('0');
int b = c - '0';
for (vector<char>::iterator iter = num.begin(); iter != num.end(); iter++)
{
int a = *iter - '0';
int t = a + b;
a = t % 10;
*iter = a + '0';
b = t / 10;
if (!b)break;
}
if (b)num.push_back(b + '0');
}
for (vector<char>::reverse_iterator it = num.rbegin(); it != num.rend() - 1; it++)
{
cout << st[*it-'0']<<" ";
}
cout << st[num[0]-'0'];
return 0;
}