编写代码以将给定的数字转换为单词。
例子:
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)。
由于不需要额外的空间。