问题描述
我们输入一个整数然后不断取各个位置进行加和操作,得到的和用汉字输出,中间带空格。
问题分析
这个问题不要被表面的要求蒙蔽了,我们如果真的输入一个整数然后不断求各位的数字那可太麻烦了。所以我们要取个巧,输入字符串来代替整数,然后取字符串的各位进行加和操作。
得到了总和怎么求每位数字呢?题目有一处提示,n小于10的100次方,也就是这个n最大也就是9999…9(一共100个9),100*9=900.所以我们的最后的总和只能是一个三位数。三位数取各位数字就简单很多了。
还有就是关于数字写成字符串,我们可以写一个数组来方便取出对应的字符串,这里我不嫌麻烦写了更通俗的switch…case…结构,更加清晰。
代码
#include <iostream>
#include <string>
using namespace std;
string convert(int n)
{
string res;
switch(n){
case 1:
res = "yi";
break;
case 2:
res = "er";
break;
case 3:
res = "san";
break;
case 4:
res = "si";
break;
case 5:
res = "wu";
break;
case 6:
res = "liu";
break;
case 7:
res = "qi";
break;
case 8:
res = "ba";
break;
case 9:
res = "jiu";
break;
case 0:
res = "ling";
break;
}
return res;
}
int main()
{
string n;
cin>>n;
int sum = 0;
for(int i = 0;i < n.length();i++)
{
sum += n[i] - '0';
}
int g,s,b;
b = sum / 100;
s = (sum % 100) / 10;
g = sum % 10;
string b_res = convert(b);
string g_res = convert(g);
string s_res = convert(s);
//还有一个问题i,这里我写的比较麻烦,只是为了更清晰:
//如果百位数字不是0的话,我们就可以无脑输出了,可是如果百位数字是0的话,我们不能把百位的0输出
//同理如果百位和十位都是0,我们只输出一个个位即可
if(b != 0)
cout<<b_res<<" "<<s_res<<" "<<g_res;
else if(b == 0 && s == 0)
cout<<g_res;
else if(b == 0 and s != 0)
cout<<s_res<<" "<<g_res;
return 0;
总结
答题用时:11min
Q2——finish√