直接将数字三位作为一份进行解析,然后需要慢慢的进行调试,细节比较多
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
long n = sc.nextLong();
String result = solution(n);
System.out.println(result);
}
}
static Map<Integer,String> map = new HashMap<Integer,String>(){{
put(1,"one");put(2,"two");put(3,"three");put(4,"four");
put(5,"five");put(6,"six");put(7,"seven");put(8,"eight");
put(9,"nine");
}};
static Map<Integer,String> map1 = new HashMap<Integer,String>(){{
put(1,"eleven");put(2,"twelve");put(3,"thirteen");put(4,"fourteen");
put(5,"fifteen");put(6,"sixteen");put(7,"seventeen");put(8,"eighteen");
put(9,"nineteen");put(0,"ten");
}};
static Map<Integer,String> map10 = new HashMap<Integer,String>(){{
put(1,"ten");put(2,"twenty");put(3,"thirty");put(4,"forty");
put(5,"fifty");put(6,"sixty");put(7,"seventy");put(8,"eighty");
put(9,"ninety");
}};
static String[] unit = {"ten", "hundred", "thousand", "million", "billion", "and"};
public static String solution(long n){
StringBuilder result = new StringBuilder();
int power = 0;
while(n > 0){
StringBuilder sb = new StringBuilder();
int curr = (int)n % 1000;
int gewei = curr % 10;
int shiwei = curr / 10 % 10;
int baiwei = curr / 100 % 10;
if(baiwei != 0){
sb.append(map.get(baiwei)).append(" ").append(unit[1]);
}
if(shiwei != 0){
if(baiwei != 0){
sb.append(" and");
}
if(sb.length() != 0){
sb.append(" ");
}
if(shiwei != 1){
sb.append(map10.get(shiwei));
}else{
//十位等于1需要另外处理
sb.append(map1.get(gewei));
}
}
if(gewei != 0 && shiwei != 1){ //十位等于1已经十位数处处理过了
if(shiwei == 0 && baiwei != 0){
sb.append(" and");
}
if(sb.length() != 0){
sb.append(" ");
}
sb.append(map.get(gewei));
}
if(sb.length() != 0){
if(power >= 1){
result.insert(0, " ");
result.insert(0, unit[ 1 + power % 4]);
}
result.insert(0, " ");
result.insert(0, sb.toString());
}
power++;
n = n / 1000;
}
return result.toString();
}
}

京公网安备 11010502036488号