📌  相关文章
📜  将给定数字转换为单词的程序|套装2

📅  最后修改于: 2021-05-04 14:50:50             🧑  作者: Mango

编写代码以将给定的数字转换为单词。
例子:

Input: 438237764
Output: forty three crore eighty two lakh 
thirty seven thousand seven hundred and 
sixty four 

Input: 999999
Output: nine lakh ninety nine thousand nine
hundred and ninety nine

Input: 1000
Output: one thousand 
Explanation:1000 in words is "one thousand"

在上一篇文章中,我们已经讨论了一种处理0到9999之间的数字的方法。
解决方案:此方法可以处理直到20位数字的数字,这些数字小于ULLONG_MAX(unsigned long long int类型的对象的最大值)。 ULLONG_MAX等于十进制18446744073709551615,假设编译器需要8个字节来存储无符号long long int。
下图显示了任何9位正整数的位置值图表:

4  3  8  2  3  7  7  6  4
|  |  |  |  |  |  |  |  |__ ones' place
|  |  |  |  |  |  |  |__ __ tens' place
|  |  |  |  |  |  |__ __ __ hundreds' place
|  |  |  |  |  |__ __ __ __ thousands' place
|  |  |  |  |__ __ __ __ __ tens thousands' place
|  |  |  |__ __ __ __ __ __ hundred thousands' place
|  |  |__ __ __ __ __ __ __ one millions' place
|  |__ __ __ __ __ __ __ __ ten millions' place
|__ __ __ __ __ __ __ __ __ hundred millions' place

想法是根据上面的位置值图表将数字分为几个数字,并从最高有效数字开始处理它们。这是一个支持最多9位数字的简单实现。该程序可以轻松扩展以支持任何20位数字。

C++
/* C++ program to print a given number in words.
   The program handles till 9 digits numbers and
   can be easily extended to 20 digit number */
#include 
using namespace std;
 
// strings at index 0 is not used, it is to make array
// indexing simple
string one[] = { "", "one ", "two ", "three ", "four ",
                 "five ", "six ", "seven ", "eight ",
                 "nine ", "ten ", "eleven ", "twelve ",
                 "thirteen ", "fourteen ", "fifteen ",
                 "sixteen ", "seventeen ", "eighteen ",
                 "nineteen " };
 
// strings at index 0 and 1 are not used, they is to
// make array indexing simple
string ten[] = { "", "", "twenty ", "thirty ", "forty ",
                 "fifty ", "sixty ", "seventy ", "eighty ",
                 "ninety " };
 
// n is 1- or 2-digit number
string numToWords(int n, string s)
{
    string str = "";
    // if n is more than 19, divide it
    if (n > 19)
        str += ten[n / 10] + one[n % 10];
    else
        str += one[n];
 
    // if n is non-zero
    if (n)
        str += s;
 
    return str;
}
 
// Function to print a given number in words
string convertToWords(long n)
{
    // stores word representation of given number n
    string out;
 
    // handles digits at ten millions and hundred
    // millions places (if any)
    out += numToWords((n / 10000000), "crore ");
 
    // handles digits at hundred thousands and one
    // millions places (if any)
    out += numToWords(((n / 100000) % 100), "lakh ");
 
    // handles digits at thousands and tens thousands
    // places (if any)
    out += numToWords(((n / 1000) % 100), "thousand ");
 
    // handles digit at hundreds places (if any)
    out += numToWords(((n / 100) % 10), "hundred ");
 
    if (n > 100 && n % 100)
        out += "and ";
 
    // handles digits at ones and tens places (if any)
    out += numToWords((n % 100), "");
 
    return out;
}
 
// Driver code
int main()
{
    // long handles upto 9 digit no
    // change to unsigned long long int to
    // handle more digit number
    long n = 438237764;
 
    // convert given number in words
    cout << convertToWords(n) << endl;
 
    return 0;
}


Java
/* Java program to print a given number in words.
The program handles till 9 digits numbers and
can be easily extended to 20 digit number */
class GFG {
 
    // Strings at index 0 is not used, it is to make array
    // indexing simple
    static String one[] = { "", "one ", "two ", "three ", "four ",
                            "five ", "six ", "seven ", "eight ",
                            "nine ", "ten ", "eleven ", "twelve ",
                            "thirteen ", "fourteen ", "fifteen ",
                            "sixteen ", "seventeen ", "eighteen ",
                            "nineteen " };
 
    // Strings at index 0 and 1 are not used, they is to
    // make array indexing simple
    static String ten[] = { "", "", "twenty ", "thirty ", "forty ",
                            "fifty ", "sixty ", "seventy ", "eighty ",
                            "ninety " };
 
    // n is 1- or 2-digit number
    static String numToWords(int n, String s)
    {
        String str = "";
        // if n is more than 19, divide it
        if (n > 19) {
            str += ten[n / 10] + one[n % 10];
        }
        else {
            str += one[n];
        }
 
        // if n is non-zero
        if (n != 0) {
            str += s;
        }
 
        return str;
    }
 
    // Function to print a given number in words
    static String convertToWords(long n)
    {
        // stores word representation of given number n
        String out = "";
 
        // handles digits at ten millions and hundred
        // millions places (if any)
        out += numToWords((int)(n / 10000000), "crore ");
 
        // handles digits at hundred thousands and one
        // millions places (if any)
        out += numToWords((int)((n / 100000) % 100), "lakh ");
 
        // handles digits at thousands and tens thousands
        // places (if any)
        out += numToWords((int)((n / 1000) % 100), "thousand ");
 
        // handles digit at hundreds places (if any)
        out += numToWords((int)((n / 100) % 10), "hundred ");
 
        if (n > 100 && n % 100 > 0) {
            out += "and ";
        }
 
        // handles digits at ones and tens places (if any)
        out += numToWords((int)(n % 100), "");
 
        return out;
    }
 
    // Driver code
    public static void main(String[] args)
    {
        // long handles upto 9 digit no
        // change to unsigned long long int to
        // handle more digit number
        long n = 438237764;
 
        // convert given number in words
        System.out.printf(convertToWords(n));
    }
}


Python3
# Python3 program to print a given number in words.
# The program handles till 9 digits numbers and
# can be easily extended to 20 digit number
 
# strings at index 0 is not used, it
# is to make array indexing simple
one = [ "", "one ", "two ", "three ", "four ",
        "five ", "six ", "seven ", "eight ",
        "nine ", "ten ", "eleven ", "twelve ",
        "thirteen ", "fourteen ", "fifteen ",
        "sixteen ", "seventeen ", "eighteen ",
        "nineteen "];
 
# strings at index 0 and 1 are not used,
# they is to make array indexing simple
ten = [ "", "", "twenty ", "thirty ", "forty ",
        "fifty ", "sixty ", "seventy ", "eighty ",
        "ninety "];
 
# n is 1- or 2-digit number
def numToWords(n, s):
 
    str = "";
     
    # if n is more than 19, divide it
    if (n > 19):
        str += ten[n // 10] + one[n % 10];
    else:
        str += one[n];
 
    # if n is non-zero
    if (n):
        str += s;
 
    return str;
 
# Function to print a given number in words
def convertToWords(n):
 
    # stores word representation of given
    # number n
    out = "";
 
    # handles digits at ten millions and
    # hundred millions places (if any)
    out += numToWords((n // 10000000),
                            "crore ");
 
    # handles digits at hundred thousands
    # and one millions places (if any)
    out += numToWords(((n // 100000) % 100),
                                   "lakh ");
 
    # handles digits at thousands and tens
    # thousands places (if any)
    out += numToWords(((n // 1000) % 100),
                             "thousand ");
 
    # handles digit at hundreds places (if any)
    out += numToWords(((n // 100) % 10),
                            "hundred ");
 
    if (n > 100 and n % 100):
        out += "and ";
 
    # handles digits at ones and tens
    # places (if any)
    out += numToWords((n % 100), "");
 
    return out;
 
# Driver code
 
# long handles upto 9 digit no
# change to unsigned long long
# int to handle more digit number
n = 438237764;
 
# convert given number in words
print(convertToWords(n));
 
# This code is contributed by mits


C#
/* C# program to print a given number in words.
The program handles till 9 digits numbers and
can be easily extended to 20 digit number */
using System;
class GFG {
 
    // strings at index 0 is not used, it is
    // to make array indexing simple
    static string[] one = { "", "one ", "two ", "three ", "four ",
                            "five ", "six ", "seven ", "eight ",
                            "nine ", "ten ", "eleven ", "twelve ",
                            "thirteen ", "fourteen ", "fifteen ",
                            "sixteen ", "seventeen ", "eighteen ",
                            "nineteen " };
 
    // strings at index 0 and 1 are not used,
    // they is to make array indexing simple
    static string[] ten = { "", "", "twenty ", "thirty ", "forty ",
                            "fifty ", "sixty ", "seventy ", "eighty ",
                            "ninety " };
 
    // n is 1- or 2-digit number
    static string numToWords(int n, string s)
    {
        string str = "";
 
        // if n is more than 19, divide it
        if (n > 19) {
            str += ten[n / 10] + one[n % 10];
        }
        else {
            str += one[n];
        }
 
        // if n is non-zero
        if (n != 0) {
            str += s;
        }
 
        return str;
    }
 
    // Function to print a given number in words
    static string convertToWords(long n)
    {
 
        // stores word representation of
        // given number n
        string out1 = "";
 
        // handles digits at ten millions and
        // hundred millions places (if any)
        out1 += numToWords((int)(n / 10000000),
                           "crore ");
 
        // handles digits at hundred thousands
        // and one millions places (if any)
        out1 += numToWords((int)((n / 100000) % 100),
                           "lakh ");
 
        // handles digits at thousands and tens
        // thousands places (if any)
        out1 += numToWords((int)((n / 1000) % 100),
                           "thousand ");
 
        // handles digit at hundreds places (if any)
        out1 += numToWords((int)((n / 100) % 10),
                           "hundred ");
 
        if (n > 100 && n % 100 > 0) {
            out1 += "and ";
        }
 
        // handles digits at ones and tens
        // places (if any)
        out1 += numToWords((int)(n % 100), "");
 
        return out1;
    }
 
    // Driver code
    static void Main()
    {
        // long handles upto 9 digit no
        // change to unsigned long long int to
        // handle more digit number
        long n = 438237764;
 
        // convert given number in words
        Console.WriteLine(convertToWords(n));
    }
}
 
// This code is contributed by mits


PHP
 19)
        {
            $str .= $ten[(int)($n / 10)];
            $str .= $one[$n % 10];
        }
    else
        $str .= $one[$n];
 
    // if n is non-zero
    if ($n != 0 )
        $str .= $s;
 
    return $str;
}
 
// Function to print a given number in words
function convertToWords($n)
{
    // stores word representation of
    // given number n
    $out = "";
 
    // handles digits at ten millions and
    // hundred millions places (if any)
    $out .= numToWords((int)($n / 10000000), "crore ");
 
    // handles digits at hundred thousands
    // and one millions places (if any)
    $out .= numToWords(((int)($n / 100000) % 100), "lakh ");
 
    // handles digits at thousands and tens
    // thousands places (if any)
    $out .= numToWords(((int)($n / 1000) % 100), "thousand ");
 
    // handles digit at hundreds places (if any)
    $out .= numToWords(((int)($n / 100) % 10), "hundred ");
 
    if ($n > 100 && $n % 100)
        $out .= "and ";
 
    // handles digits at ones and tens
    // places (if any)
    $out .= numToWords(($n % 100), "");
 
    return $out;
}
 
// Driver code
 
// long handles upto 9 digit no
// change to unsigned long long int to
// handle more digit number
$n = 438237764;
 
// convert given number in words
echo convertToWords($n) . "\n";
 
// This code is contributed by Akanksha Rai
?>


Javascript


输出:

forty three crore eighty two lakh thirty seven 
thousand seven hundred and sixty four 

复杂度分析:

  • 时间复杂度: O(1)。
    循环运行一定的时间。
  • 辅助空间: O(1)。
    由于不需要额外的空间。