public class Solution {
public String numberToWords(int num) {
if(num==0){
return "Zero";
}
int BillionString=num/1000000000;
int MillionString=num%1000000000/1000000;
int ThousandString=num%1000000/1000;
int HundredString=num%1000;
String result="";
if(BillionString>0){
result+=ThreeNum(BillionString)+" "+"Billion";
}
if(MillionString>0){
result+=ThreeNum(MillionString)+" "+"Million";
}
if(ThousandString>0){
result+=ThreeNum(ThousandString)+" "+"Thousand";
}
if(HundredString>=0){
result+=ThreeNum(HundredString);
}
return result.trim();}
public String ThreeNum(int num){
if(num>=1000||num<0){
return "";
}
String result="";
if(num>=100){
result+=BaseNumber(num/100)+" "+"Hundred";
}
num=num%100;
if(num>20){
result+=BaseNumber(num/10*10);
if(num%10!=0){
result+=BaseNumber(num%10);
}
}else if(num>0){
result+=BaseNumber(num);
}
return result;
}
public String BaseNumber(int num) {
String numEnglishWord=" ";
switch (num) {
case 1:
numEnglishWord+="One";
break;
case 2:
numEnglishWord+="Two";
break;
case 3:
numEnglishWord+="Three";
break;
case 4:
numEnglishWord+="Four";
break;
case 5:
numEnglishWord+="Five";
break;
case 6:
numEnglishWord+="Six";
break;
case 7:
numEnglishWord+="Seven";
break;
case 8:
numEnglishWord+="Eight";
break;
case 9:
numEnglishWord+="Nine";
break;
case 10:
numEnglishWord+="Ten";
break;
case 11:
numEnglishWord+="Eleven";
break;
case 12:
numEnglishWord+="Twelve";
break;
case 13:
numEnglishWord+="Thirteen";
break;
case 14:
numEnglishWord+="Fourteen";
break;
case 15:
numEnglishWord+="Fifteen";
break;
case 16:
numEnglishWord+="Sixteen";
break;
case 17:
numEnglishWord+="Seventeen";
break;
case 18:
numEnglishWord+="Eighteen";
break;
case 19:
numEnglishWord+="Nineteen";
break;
case 20:
numEnglishWord+="Twenty";
break;
case 30:
numEnglishWord+="Thirty";
break;
case 40:
numEnglishWord+="Forty";
break;
case 50:
numEnglishWord+="Fifty";
break;
case 60:
numEnglishWord+="Sixty";
break;
case 70:
numEnglishWord+="Seventy";
break;
case 80:
numEnglishWord+="Eighty";
break;
case 90:
numEnglishWord+="Ninety";
break;
}
return numEnglishWord;
}
}
方法二:
public class Solution {
String[] digits = new String[]{"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
String[] teen = new String[]{"Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
String[] tens = new String[]{"Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
String[] bigs = new String[]{"", "Thousand", "Million", "Billion"};
public String numberToWords(int num) {
String res = new String();
if (num == 0) return "Zero";
int count = 0;
while (num > 0) {
int belowThousand = num % 1000;
if (belowThousand != 0) {
res = process(belowThousand) + " " + bigs[count] + " " + res;
}
count++;
num = num / 1000;
}
return res.trim();
}
public String process(int n) {
String res = new String();
if (n/100 > 0) {
res = digits[n/100-1] + " " + "Hundred" + " ";
n = n%100;
}
if (n>=11 && n<=19) {
res = res + teen[n%10-1];
return res;
}
else if (n/10 > 0) {
res = res + tens[n/10-1] + " ";
n = n%10;
}
if (n > 0) {
res = res + digits[n-1];
}
return res.trim();
}}