给一个非负整数 n, 用单词打印数字
注意事项
n <= 2147483647
样例:
给出 n = 125
返回 one hundred twenty five
思路:
根据n的位数来判断是”billion”,”million”,”thousand”,”hundred”,还是十位数或者个位数。
对于位数较长的数字,递归求解。
#ifndef C688_H
#define C688_H
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Solution {
public:
/*
* @param : the number
* @return: the number in words
*/
string convertWords(int number) {
// Write your code here
string str = to_string(number);
int len = str.size();
//构建字典
vector<string> dic{ "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
"eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
vector<string> num{"","ten","twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
string res;
if (len == 1)
return dic[number];
else if (len == 2)
{
res += num[str[0] - '0'];
if (res == "ten") //特殊处理10
{
if (str[1] == '0')
return res;
else
return dic[number];
}
else //是否是整除的十位数
{
if (str[1] != '0')
res += " " + convertWords(number%10);
return res;
}
}
else if (len == 3)
{
res += dic[str[0] - '0'] + " hundred";
if (number % 100 != 0)
res += " " + convertWords(number % 100);
return res;
}
//4-6位后面都是thousand,递归求出?thousand,再加上百位以前的数字
else if (len >= 4 && len <= 6)
{
res += convertWords(number / 1000) + " thousand";
if (number % 1000 != 0)
res += " " + convertWords(number % 1000);
return res;
}
else if (len >= 7 && len <= 9)
{
res += convertWords(number / 1000000) + " million";
if (number % 1000000 != 0)
res += " " + convertWords(number % 1000000);
return res;
}
else
{
res += convertWords(number / 1000000000) + " billion";
if (number % 1000000000 != 0)
res += " " + convertWords(number % 1000000000);
return res;
}
}
};
#endif