直接将数字三位作为一份进行解析,然后需要慢慢的进行调试,细节比较多

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();
    }

}