273. Integer to English Words
Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.
将非负整数转换为英语表示方式。
分析:
在汉语中计数方式比较简单,各个位上的数字都是一样(一、二、。。。九),在将各位上的单位(十、百、千等)补上即可。英语略有不同,首先是0~20,30、40、。。。90均为不同的单词,且英语中没有汉语中的万和亿,取而代之的是million(百万)、billion(十亿)。
依次求出各位上的数(十亿、百万、千、百、十位(20~90)、十几(11~19)、个位(0~9)),用英语表示出来,并加上相应的单位即可。
代码如下:
string numberToWords(int num)
{
map<long long, string> digit_to_english_map;
digit_to_english_map.insert(make_pair(90, "Ninety"));
digit_to_english_map.insert(make_pair(80, "Eighty"));
digit_to_english_map.insert(make_pair(70, "Seventy"));
digit_to_english_map.insert(make_pair(60, "Sixty"));
digit_to_english_map.insert(make_pair(50, "Fifty"));
digit_to_english_map.insert(make_pair(40, "Forty"));
digit_to_english_map.insert(make_pair(30, "Thirty"));
digit_to_english_map.insert(make_pair(20, "Twenty"));
digit_to_english_map.insert(make_pair(19, "Nineteen"));
digit_to_english_map.insert(make_pair(18, "Eighteen"));
digit_to_english_map.insert(make_pair(17, "Seventeen"));
digit_to_english_map.insert(make_pair(16, "Sixteen"));
digit_to_english_map.insert(make_pair(15, "Fifteen"));
digit_to_english_map.insert(make_pair(14, "Fourteen"));
digit_to_english_map.insert(make_pair(13, "Thirteen"));
digit_to_english_map.insert(make_pair(12, "Twelve"));
digit_to_english_map.insert(make_pair(11, "Eleven"));
digit_to_english_map.insert(make_pair(10, "Ten"));
digit_to_english_map.insert(make_pair(9, "Nine"));
digit_to_english_map.insert(make_pair(8, "Eight"));
digit_to_english_map.insert(make_pair(7, "Seven"));
digit_to_english_map.insert(make_pair(6, "Six"));
digit_to_english_map.insert(make_pair(5, "Five"));
digit_to_english_map.insert(make_pair(4, "Four"));
digit_to_english_map.insert(make_pair(3, "Three"));
digit_to_english_map.insert(make_pair(2, "Two"));
digit_to_english_map.insert(make_pair(1, "One"));
digit_to_english_map.insert(make_pair(0, "Zero"));
long long _num = num;
int coef = 0;
string result;
if (_num >= 1000000000)
{
coef = int(_num / 1000000000);
result += numberToWords(coef) + " Billion";
_num %= 1000000000;
if (_num == 0)
return result;
result += " ";
}
if (_num < 1000000000 && _num >= 1000000)
{
coef = int(_num / 1000000);
result += numberToWords(coef) + " Million";
_num %= 1000000;
if (_num == 0)
return result;
result += " ";
}
if (_num < 1000000 && _num >= 1000)
{
coef = int(_num / 1000);
result += numberToWords(coef) + " Thousand";
_num %= 1000;
if (_num == 0)
return result;
result += " ";
}
if (_num < 1000 && _num >= 100)
{
coef = int(_num / 100);
result += digit_to_english_map[coef] + " Hundred";
_num %= 100;
if (_num == 0)
return result;
result += " ";
}
if (_num < 100 && _num > 20)
{
coef = int(_num / 10);
coef *= 10;
result += digit_to_english_map[coef];
_num %= coef;
if (_num == 0)
return result;
result += " ";
}
if (_num <= 20)
result += digit_to_english_map[_num];
return result;
}
posted on
2018-03-19 12:56
bigpotato 阅读(
...) 评论(
...)
编辑
收藏