bigpotato

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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  阅读(120)  评论(0)    收藏  举报