题意:给出一下正整数,输出英文表示
思路:每三个数一组,因为最多有三组,对应的分别为Billion,Million,Thousand。然后针对每组的数输出
代码如下:
public class Solution
{
private String[] bigNum = {"Billion", "Million", "Thousand","" };
private String[] num_str = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen",
"Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
private String numberToString(int num)
{
StringBuilder sb = new StringBuilder();
int n = num / 100;
if (n > 0)
{
sb.append(num_str[n]);
sb.append(" Hundred");
}
n = num % 100;
if (n > 0 && n < 20)
{
if (sb.length() != 0) sb.append(" ");
sb.append(num_str[n]);
}
else if (n >= 20)
{
if (sb.length() != 0) sb.append(" ");
sb.append(num_str[19 + n / 10 - 1]);
n %= 10;
if (n != 0)
{
if (sb.length() != 0) sb.append(" ");
sb.append(num_str[n]);
}
}
return sb.toString();
}
public String numberToWords(int num) {
List<Integer> ar = new ArrayList<Integer>();
while (num >= 1000) {
int tmp = num % 1000;
ar.add(tmp);
num /= 1000;
}
if (num != 0) ar.add(num);
//System.out.println(ar);
int size = ar.size();
//System.out.println("size:" + size);
StringBuilder sb = new StringBuilder();
for (int i = size - 1; i >= 0; i--)
{
if (ar.get(i) != 0)
{
if (sb.length() != 0) sb.append(" ");
sb.append(numberToString(ar.get(i)));
if (!bigNum[3 - i].isEmpty()) sb.append(" ");
sb.append(bigNum[3 - i]);
}
}
if (sb.length() == 0) sb.append("Zero");
return sb.toString();
}
}