题解 | #学英语#

学英语

http://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc

#include <iostream>
#include <vector>
#include <string>

using namespace std;

/*
思路:
若输入[0, 19],则直接输出。
当输入[20, 99] 十位,若能被10整除,即 30 % 10 == 0,则直接输出;若不能被10整除,则十位直接获取+个位进行递归。
当输入[100, 999]:百,若能被100整除,即 300 % 100 == 0,则直接输出;若不能被100整除,则百位进行递归+十位递归。
当输入[1000, 999999]:千~十万,若能被100整除,即 300 % 1000 == 0,则直接输出;若不能被1000整除,则千位进行递归+百位递归。
当输入[1000000, 999999999]:百万~亿,若能被100整除,即 300 % 1000000 == 0,则直接输出;若不能被10000000整除,则百万位进行递归+千位递归+百位递归。

当输入大于1000000000:10亿,若能被10亿整除,即 300亿 % 10亿 == 0,则直接输出;若不能被10亿整除,则十亿 + 百万位进行递归+千位递归+百递归。

*/
string readEnglish(int num)
{
    vector<string> zeroToNinteen = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
             "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
    vector<string> tenToNitety = {"none", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
    if(num >= 0 && num <= 19) {
        return zeroToNinteen[num];
    } else if (num >= 20 && num <= 99) {
        if (num % 10 == 0) {
            return tenToNitety[num/10];
        } else {
            return tenToNitety[num/10] + " " + readEnglish(num % 10);
        }
    } else if (num >= 100 && num <= 999) {
        if (num % 100 == 0) {
            return zeroToNinteen[num/100] + " hundred ";
        } else {
            return readEnglish(num/100) + " hundred and " + readEnglish(num % 100);
        } 
    }  else if (num >= 1000 && num <= 999999) {
        if (num % 1000 == 0) {
            return zeroToNinteen[num/1000] + " thousand ";
        } else {
            return readEnglish(num/1000)  + " thousand " + readEnglish(num % 1000);
        } 
    }  else if (num >= 1000000 && num <= 999999999) {
        if (num % 1000000 == 0) {
            return zeroToNinteen[num/1000000] + " million ";
        } else {
            return readEnglish(num/1000000)  + " million " + readEnglish(num /1000 % 1000) + " thousand " + 
                readEnglish(num % 1000);
        } 
    } else if (num >= 1000000000) {
        if (num % 1000000000 == 0) {
            return zeroToNinteen[num/1000000000] + " billion ";
        } 
        
         return readEnglish(num/1000000000) + " billion " + readEnglish(num%1000000/1000000)  + " million " + 
             readEnglish(num % 1000000/1000) + " thousand " + readEnglish(num % 1000);
    }
    string out = "error";
    return out;
}



int main()
{
    int num;
    while(cin>>num) {
        cout<<readEnglish(num)<<endl;
    }
    return 0;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务