1002

作者: 古界族邪神 | 来源:发表于2020-03-27 22:03 被阅读0次
1002
这道题的难点在与输入,n应该是小于100位
int 4byte 有符号signed范围:231-1~-231 即2147483647 ~ -2147483648
double 8 byte 范围:1.79769e+308 ~ 2.22507e-308
按照范围,应该选取double类型
以题目给的样例为例:
image.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;
}

相关文章

网友评论

      本文标题:1002

      本文链接:https://www.haomeiwen.com/subject/nzaruhtx.html