![](https://img.haomeiwen.com/i15194053/704ecdd067dd2e05.png)
这道题的难点在与输入,n应该是小于100位
int 4byte 有符号signed范围:231-1~-231 即2147483647 ~ -2147483648
double 8 byte 范围:1.79769e+308 ~ 2.22507e-308
按照范围,应该选取double类型
以题目给的样例为例:
![](https://img.haomeiwen.com/i15194053/873d46c0c31b5c58.png)
这么长的数字截取每一位很困难,%运算是不能用在double类型上的。
原数字除以10取整的话int又装不下。
那么我们不如换个思路,以字符串的形式读取长数字,再通过比对字符串每一个字符的方式得到每一个数字。例如‘2’转换成2。
#include <iostream>
using namespace std;
#include <vector>
int judge(char n)
{
if(n=='0')
return 0;
else if(n=='1')
return 1;
else if(n=='2')
return 2;
else if(n=='3')
return 3;
else if(n=='4')
return 4;
else if(n=='5')
return 5;
else if(n=='6')
return 6;
else if(n=='7')
return 7;
else if(n=='8')
return 8;
else if(n=='9')
return 9;
}
int main()
{
string names[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
string num;
cin>>num;
int sum=0;
for(int i=0;i<num.size();i++)
{
int temp;
temp=judge(num[i]);
sum+=temp;
}
//cout<<sum<<endl;
vector<string> strs;
while(sum!=0)
{
int temp;
temp=sum%10;
strs.push_back(names[temp]);
sum=sum/10;
}
string res=strs[strs.size()-1];
for(int i=strs.size()-2;i>=0;i--)
{
res+=" "+strs[i];
}
cout<<res<<endl;
return 0;
}
网友评论