Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将3位数字转换为单词C++_C++ - Fatal编程技术网

将3位数字转换为单词C++

将3位数字转换为单词C++,c++,C++,我一直在玩数字到单词的游戏,找到了一种简单的方法来做1-99之间的任意两位数 有没有什么方法可以扩展我当前的代码以允许3位数字和1-999数字,这有多容易?您可以使用递归处理更大的数字。 利用这个程序已经可以处理两位数的事实,用num=num/100解析百位数,并将剩余的r=num%100传递给您创建的函数。 只要稍加努力,您就可以处理任意长度的数字。以下是SQL中的算法。dbo.NumberWord表有两列:Number和WordEn。该表包含数字1到20,然后是30、40、50、60、70、

我一直在玩数字到单词的游戏,找到了一种简单的方法来做1-99之间的任意两位数


有没有什么方法可以扩展我当前的代码以允许3位数字和1-999数字,这有多容易?

您可以使用递归处理更大的数字。 利用这个程序已经可以处理两位数的事实,用num=num/100解析百位数,并将剩余的r=num%100传递给您创建的函数。
只要稍加努力,您就可以处理任意长度的数字。

以下是SQL中的算法。dbo.NumberWord表有两列:Number和WordEn。该表包含数字1到20,然后是30、40、50、60、70、80和90的英文单词。一,二,二十,三十,四十,九十

下面是递归T-SQL函数,该函数用于将1到999000之间的任何整数转换为英文单词:

#include <string>
using namespace std;

int main()
{
    int num,
        leftDigit,
        rightDigit;
    string ones[] = { "Zero",
        "One",
        "Two",
        "Three",
        "Four",
        "Five",
        "Six",
        "Seven",
        "Eight",
        "Nine",
        "Ten",
        "Eleven",
        "Twelve",
        "Thirteen",
        "Fourteen",
        "Fifteen",
        "Sixteen",
        "Seventeen",
        "Eighteen",
        "Nineteen",
    };
    string tens[] = { "Twenty",
        "Thirty",
        "Forty",
        "Fifty",
        "Sixty",
        "Seventy",
        "Eighty",
        "Ninety",
    };
    cout << "Enter a Number " ;
    cin >> num; 

    if (num <=0 || num >=100 )
    {
        cout << "the Number is not Between 1-99" << endl;

    }

    else if (num >= 1 && num <= 19)
    {

        cout << "The Number you have entered is " << ones[num] << endl;

    }
    else if (num >= 20 && num <= 99)
    {

        leftDigit = num / 10;
        rightDigit = num % 10;

        cout << "the Number you have entered is " << tens[leftDigit - 2] << " " << ones[rightDigit] << endl;
    }

    system("PAUSE");
    return 0;
}

这应该可以做到:

CREATE FUNCTION [dbo].[fnNumberToEnglish] (@Number int)
    RETURNS nvarchar(1024)
AS
BEGIN   
    DECLARE
        @English nvarchar(1024) = 
            (SELECT CASE
                WHEN @Number = 0 THEN ''
                WHEN @Number BETWEEN 1 AND 19 THEN
                    (SELECT WordEn FROM dbo.NumberWord
                    WHERE Number = @Number)
                WHEN @Number BETWEEN 20 AND 99 THEN
                    (SELECT WordEn FROM dbo.NumberWord
                    WHERE (Number / 10) = @Number / 10) + N'-' + dbo.fnNumberToEnglish(@Number%10)
                WHEN @Number BETWEEN 100 AND 999 THEN
                    (dbo.fnNumberToEnglish(@Number / 100)) + N' Hundred ' + dbo.fnNumberToEnglish(@Number%100)
                WHEN @Number BETWEEN 1000 AND 999999 THEN
                    (dbo.fnNumberToEnglish(@Number / 1000)) + N' Thousand ' + dbo.fnNumberToEnglish(@Number%1000)
                ELSE
                    N' INVALID INPUT' 
            END);

    SET @English = RTRIM(@English);

    IF RIGHT(@English,1) = '-' BEGIN
        SET @English = RTRIM(LEFT(@English, LEN(@English) - 1));
    END

    RETURN @English;
END
此代码经过测试并正常工作。 如果您愿意,可以进一步扩展它。它使用递归,这使得这非常容易


此代码有效期至99999999。

打印百位数字、百字,然后打印上面的其他两位数字。有趣的是,您的代码实际上是从中复制的。我猜你只是在找人帮你做作业?奇怪的是,尽管贴了拷贝,他们还是设法在这篇文章的原始版本中拼错了17个字。关于这个问题已经有了一个代码审查:请不要提供OP的答案。向OP提供信息,让OP思考-
#include <string>
#include <iostream>
using namespace std;

string ones[] = { "",
"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven",
"Eight",
"Nine",
"Ten",
"Eleven",
"Twelve",
"Thirteen",
"Fourteen",
"Fifteen",
"Sixteen",
"Seventeen",
"Eighteen",
"Nineteen",
};
string tens[] = { "Twenty",
"Thirty",
"Forty",
"Fifty",
"Sixty",
"Seventy",
"Eighty",
"Ninety",
};
string hundred = "Hundred";
string thousand = "Thousand";
string million = "Million";
string intToWord(int num)
{
    if (num >= 1000000 && num < 1000000000)
    {
        int first = num / 1000000;
        return intToWord(first) + " " + million + " " + intToWord(num - first * 1000000);
    }
    else if (num >= 1000)
    {
        int first = num / 1000;
        return intToWord(first) + " " + thousand + " " + intToWord(num - first * 1000);
    }
    else if (num >= 100)
    {
        int first = num / 100;
        return ones[first] + " " + hundred + " " + intToWord(num - first * 100);
    }
    else if (num >= 20)
    {

        int leftDigit = num / 10;
        int rightDigit = num % 10;
        return tens[leftDigit - 2] + " " + ones[rightDigit];
    }
    else if (num >= 0)
    {
        return ones[num];
    }
    return "number too large or smaller than 1";
}
int main()
{
    int num;
    cout << "Enter a Number ";
    cin >> num;

    cout << endl << intToWord(num) << endl;

    system("PAUSE");
    return 0;
}