C++ 将数字转换为单词

2024-04-06

我在一本书中发现了这个将数字转换为单词的程序。初始程序转换数字 1-1000,但随后要求您修改程序以接受最多 1,000,000 的数字。我可以处理 20,999 以内的数字,但无法处理超过 20,999 的数字。我一整天都在修改它,并在网上查看了很多程序示例,但我看到的每个人都使用了超出我作为初学者的技术。任何建议将不胜感激。这是我到目前为止所拥有的。

#include <iostream>
#include <string>
using namespace std;

string digitName(int digit);
string teenName(int number);
string tensName(int number);
string intName(int number);


int main()
{
    int input;

    do
    {

    cout << "Please enter a positive integer: ";

    cin >> input;

    cout << "\n" << intName(input) << endl;

    cout << "\n\n" << endl;

    }while (input > 0);

    return 0;
}

string digitName(int digit)
{
    if (digit == 1) return "one";
    if (digit == 2) return "two";
    if (digit == 3) return "three";
    if (digit == 4) return "four";
    if (digit == 5) return "five";
    if (digit == 6) return "six";
    if (digit == 7) return "seven";
    if (digit == 8) return "eight";
    if (digit == 9) return "nine";

    return "";
}

string teenName(int number)
{
    if (number == 10) return "ten";
    if (number == 11) return "eleven";
    if (number == 12) return "twelve";
    if (number == 13) return "thirteen";
    if (number == 14) return "fourteen";
    if (number == 15) return "fifteen";
    if (number == 16) return "sixteen";
    if (number == 17) return "seventeen";
    if (number == 18) return "eighteen";
    if (number == 19) return "nineteen";

    return "";
}

string tensName(int number)
{
    if (number >= 90) return "ninety";
    if (number >= 80) return "eighty";
    if (number >= 70) return "seventy";
    if (number >= 60) return "sixty";
    if (number >= 50) return "fifty";
    if (number >= 40) return "fourty";
    if (number >= 30) return "thirty";
    if (number >= 20) return "twenty";

    return "";
}

string intName(int number)
{
    int part = number;
    string name;

    if (part >= 20000)
    {
        if (part % 10000 == 0)
        {
            name = tensName(part / 1000) + " thousand ";
            part = part % 1000;

        }else
        {
            name = tensName(part / 1000) + " ";
            part = part % 10000;
        }
    }

    if (part >= 10000)
    {
        name = teenName(part / 1000) + " thousand ";
        part = part % 1000;
    }

    if (part >= 1000)
    {
        name = digitName(part / 1000) + " thousand ";
        part = part % 1000;
    }

    if (part >= 100)
    {
        name = name + digitName(part / 100) + " hundred";
        part = part % 100;
    }

    if (part >= 20)
    {
        name = name + " " + tensName(part);
        part = part % 10;

    }else if (part >= 10)
    {
        name = name + " " + teenName(part);
        part = 0;
    }

    if (part > 0)
    {
        name = name + " " + digitName(part);
    }

    return name;
}

有两件事:如果您只对数组进行索引,则可以节省大量打字时间。您可以通过意识到问题在数百个案例后重复出现来更普遍地解决问题。数千、数百万、数十亿、万亿和万亿都遵循完全相同的模式,因此可以递归地完成。

    #include <iostream>
    #include <string>
    #include <vector>
    using namespace std;

    string digitName(int digit);
    string teenName(int number);
    string tensName(int number);
    string intName(int number);

    vector<string> ones {"","one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
    vector<string> teens {"ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen","sixteen", "seventeen", "eighteen", "nineteen"};
    vector<string> tens {"", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};

    string nameForNumber (long number) {
        if (number < 10) {
            return ones[number];
        } else if (number < 20) {
            return teens [number - 10];
        } else if (number < 100) {
            return tens[number / 10] + ((number % 10 != 0) ? " " + nameForNumber(number % 10) : "");
        } else if (number < 1000) {
            return nameForNumber(number / 100) + " hundred" + ((number % 100 != 0) ? " " + nameForNumber(number % 100) : "");
        } else if (number < 1000000) {
            return nameForNumber(number / 1000) + " thousand" + ((number % 1000 != 0) ? " " + nameForNumber(number % 1000) : "");
        } else if (number < 1000000000) {
            return nameForNumber(number / 1000000) + " million" + ((number % 1000000 != 0) ? " " + nameForNumber(number % 1000000) : "");
        } else if (number < 1000000000000) {
            return nameForNumber(number / 1000000000) + " billion" + ((number % 1000000000 != 0) ? " " + nameForNumber(number % 1000000000) : "");
        }
        return "error";
    }

    int main()
    {
        long input;
        do
        {
            cout << "Please enter a positive integer: ";    
            cin >> input;
            cout << "\n" << nameForNumber(input) << endl;
            cout << "\n\n" << endl;
        }while (input > 0);
        return 0;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 将数字转换为单词 的相关文章

随机推荐