题目描述
给定一个非负整数 N,你的任务是计算 N 的所有数字的总和,并以英语输出总和的每个数字。
输入格式
共一行,包含一个整数 N。
输出格式
共一行,用英语输出总和的每个数字,单词之间用空格隔开。
数据范围
0≤N≤10100
样例
输入样例:
12345
输出样例:
one five
算法1
res 来存储子符串每一位相加的和,之后需要特判 res == 0 的情况。
b[] 来存储 res 的每一位,注意是逆序存储 , 所以提前在循环体外定义变量 j 来记录长度。
由于所给的数据范围是10 的一百次幂 所以字符串的长度最多为 100 位 因此 res 的最大值为 900,b数组不需要开太大。
由于 j 循环结尾会加 1 ,所以写输出循环的时候 i = j - 1。
check 函数用来计算字符串每一位的值。
print 函数用来输出对应的英文数字
时间复杂度 $O(字符串的长度)$
参考文献
C++ 代码
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
string a;
int res, b[5];
string word[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
void check(char x)
{
res += x - '0';
}
void print(int y)
{
cout << word[y] << ' ';
}
int main()
{
cin >> a;
for(int i = 0; i < a.size(); i ++) check(a[i]);
if(!res)
{
print(0);
return 0;
}
int j;
for(j = 0;res != 0; j ++) b[j] = res % 10, res /= 10;
for(int i = j - 1; i >= 0; i --) print(b[i]);
return 0;
}