题意
给定一个非负整数 N,你的任务是计算 N 的所有数字的总和,并以英语输出总和的每个数字。
输入格式
共一行,包含一个整数 N。
输出格式
共一行,用英语输出总和的每个数字,单词之间用空格隔开。
数据范围
0≤N≤10^100
输入样例:
12345
输出样例:
one five
思路
题目的意思就是求这个数所有位上的数之和,这个数在0~10^100,所以要用string来存,因为每一位上至多是9,最多有100位,所以sum最大是900,int即可。要将数字和单词转换,所以定义了一个对照的数组dic[]
,取出sum的每一位数,在dic中找到对应的单词输出即可。注意PAT卡空格,所以可以先输出第一个,而后的每一个输出空格和单词。
AC代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
string a;
cin >> a;
int sum = 0;
for(int i = 0;i < a.size();i ++) sum += a[i] - '0';
string t = to_string(sum);
string dic[] = {
"zero","one","two","three","four",
"five","six","seven","eight","nine"
};
cout << dic[t[0] - '0'];
for(int i = 1;i < t.size();i ++)
{
cout << ' ' << dic[t[i] - '0'];
}
return 0;
}