#550. 拼写正确(3月20日)
题目描述
给定一个非负整数 N,你的任务是计算 N 的所有数字的总和,并以英语输出总和的每个数字。
输入格式
共一行,包含一个整数 N,整数 N 可能会出现前导0,比如:00123,对应的整数是123。
输出格式
共一行,用英语输出总和的每个数字,单词之间用空格隔开。
样例
输入数据
12345
输出数据
one five
数据范围
0 <= N <= 10100
思路
因为 0 <= N <= 10100,为了输入方便以及不超整数范围,考虑用 string 类型的变量s存取 N。然后就是计算 N 的所有数字的总和:
string s;
cin >> s;
int ans = 0;
for(int i = 0 ; i < s.size() ; i++)
ans = ans + (s[i] - '0');
用一个数组 a[] 存取 ans 的各个数位上的数字(a[0] 到 a[n] 依次是低位到高位):
int a[110] = {0} , num = 0;
while(ans > 0){
a[num++] = ans%10;
ans /= 10;
}
最后用一个 switch 语句输出:
for(int i = num - 1 ; i >= 0 ; i--){
switch(a[i]){
case 0 : cout << "zero" ; break;
case 1 : cout << "one" ; break;
case 2 : cout << "two" ; break;
case 3 : cout << "three" ; break;
case 4 : cout << "four" ; break;
case 5 : cout << "five" ; break;
case 6 : cout << "six" ; break;
case 7 : cout << "seven" ; break;
case 8 : cout << "eight" ; break;
case 9 : cout << "nine" ; break;
}
cout << " ";
}
完整代码
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
cin >> s;
int ans = 0;
for(int i = 0 ; i < s.size() ; i++)
ans = ans + (s[i] - '0');
int a[110] = {0} , num = 0;
while(ans > 0){
a[num++] = ans%10;
ans /= 10;
}
for(int i = num - 1 ; i >= 0 ; i--){
switch(a[i]){
case 0 : cout << "zero" ; break;
case 1 : cout << "one" ; break;
case 2 : cout << "two" ; break;
case 3 : cout << "three" ; break;
case 4 : cout << "four" ; break;
case 5 : cout << "five" ; break;
case 6 : cout << "six" ; break;
case 7 : cout << "seven" ; break;
case 8 : cout << "eight" ; break;
case 9 : cout << "nine" ; break;
}
cout << " ";
}
return 0;
}