给定一个非负整数 N,你的任务是计算 N 的所有数字的总和,并以英语输出总和的每个数字。
输入格式
共一行,包含一个整数 N。
输出格式
共一行,用英语输出总和的每个数字,单词之间用空格隔开。
我的题解:
#include <iostream>
using namespace std;
int main()
{
string a;
cin>>a;
int i=0;
int sum1=0;
for(i=0;i<int(a.size());i++)
{
sum1+=(a[i]-'0');
}
string res;
res=to_string(sum1);
// cout<<res;
int m;
for(m=0;m<int(res.size());m++)
{
switch(res[m]){
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;
case '0': cout<<"zero";break;
}
cout<<' ';
}
}
优秀题解:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
string table[10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
int main()
{
string a;
cin >> a;
if(a == "0") //特判,不然遇到0会段错误
{
cout << "zero";
return 0;
}
long long sum = 0;
int ans[10000];
int len = a.length();
for (int j = 0; j < len; j++)
{
sum += (a[j] - '0');
}
int i = 0;
while(sum)
{
ans[i] = sum % 10;
sum /= 10;
i++;
}
i--;
while(i)
{
cout << table[ans[i]] << " ";
i--;
}
cout << table[ans[i]]; //末尾不能有空格
return 0;
}
作者:小叶小叶风情不解
链接:https://www.acwing.com/solution/content/10757/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
模拟法
思路:
各个位求和,结果用 res 保存
res 求余得到末尾数字,把对应的英文存入结果 out。res 更新为 res / 10。相当于把末尾去掉了。
倒序输出 out 中的元素即可。
#include <iostream>
#include <vector>
using namespace std;
string english[10] ={"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
int main()
{
string s;
cin >> s;
if(s == "0")
{
cout << "zero";
return 0;
}
int res = 0;
for(auto c : s)
{
res += c - '0';
}
vector<string> out;
while(res)
{
out.push_back(english[res % 10]);
res = res / 10;
}
for(int i = out.size() - 1; i >= 0; i--)
cout << out[i] << " ";
}
作者:Hasity
链接:https://www.acwing.com/solution/content/35551/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。