牛客 HJ42 学英语 c++

牛客 HJ42 学英语 c++,第1张

题目描述:

本道题难度是较难,但属于处理起来比较复杂的那种,题意很好理解,也不难做,其实就是简单的字符串拼接而已。


题目要求每三位数字放一块进行处理,那就num%1000 作为一个小块进行处理就完事了。

需要注意的点
1. 每三位处理一次,三位处理完后根据取余次数,如果(num/1000=0),就给字符串前面加 thousan、million,以及其他更高的等级。

2.三位一处理,如果百位不为0,那就给字符串加一个“ hundred and ”,然后把百位数字加在前面。

3.特殊化处理,我特殊化处理了1-19这些数字,以及每三位取余后,十位为0的情况以及个位为0的情况,这些小点都决定了输出格式,有时候多一个空格少一个空格的很麻烦,也很讨厌

来看代码

#include 
#include 

using namespace std;

int main()
{
    map<int, string> M1; // 个位   1-19
    map<int, string> M2; //十位
    map<int, string> M3; //百  千  万
    M1 = {{1, "one"}, {2, "two"}, {3, "three"}, {4, "four"}, {5, "five"}, {6, "six"}, {7, "seven"}, {8, "eight"}, {9, "nine"}, {10, "ten"}, {11, "eleven"}, {12, "twelve"}, {13, "thirteen"}, {14, "fourteen"}, {15, "fifteen"}, {16, "sixteen"}, {17, "seventeen"}, {18, "eighteen"}, {19, "nineteen"}};
    M2 = {{2, "twenty"}, {3, "thirty"}, {4, "forty"}, {5, "fifty"}, {6, "sixty"}, {7, "seventy"}, {8, "eighty"}, {9, "ninety"}};
    M3 = {{1, "thousand"}, {2, "million"}};
    long long num;
    long long temp = 0;
    int flag = 0; 
    //记录是几个三位合并 然后拼接 hundred thousand million
    string str = "";
    cin >> num;
    while (num)
    {
        temp = num % 1000;
        num /= 1000;
        flag++;
        if ((temp / 10) % 10 <= 1)
        { //最后两位是1-19
            str = M1[temp % 100] + " " + str;
        }
        else
        {
            if (((temp / 10) % 10) && (temp % 10))
             //个位和十位均不为0
                str = M2[(temp / 10) % 10] + " " + M1[temp % 10] + " " + str;
            if ((temp % 10) == 0) //个位为0
            {
                str = M2[(temp / 10) % 10] + " " + str;
            }
        }
        if ((temp / 100) != 0)
        {
            if (temp % 100)
                str = M1[temp / 100] + " hundred" + " and " + str;
            else
                str = M1[temp / 100] + " hundred" + str;
        }
        if (num != 0)
        {
            str = M3[flag] + " " + str;
        }
    }
    cout << str << endl;
}

由于是需要特殊化处理数字,所以采用了map来进行键值对的匹配。

方便使用。


所以大概就这个样子。


这道题写的很开心!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/674010.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存