英语里面数数还比较复杂,1-9,10-19,20,30,40都不一样,1-12:one two three four five six seven eight nine ten eleven twelve;13-19末尾以teen结尾,比如19 nineteen;20-99可用“十位-个位”的方法读数,比如21 twenty-one;100的英文hundred。
代码里面就是分情况判断和处理就行。



import java.util.Scanner;

public class Main {
    public static String[] data = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
    public static String[] data1 = {"zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};

    /**
     * 11 eleven 12 twelve 13 thirteen 14 fourteen 15 fifteen
     * <p>
     * 16 sixteen 17 seventeen 18 eighteen 19 nineteen
     */
    public static String[] data2 = {"ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
    public static int[] type = {0, 1, 0, 0, 1, 0, 0, 1, 0};
    public static String[] data3 = {"", "", "hundred", "thousand", "", "hundred", "million", "", "hundred"};

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long n = in.nextLong();
        String s = String.valueOf(n);
        StringBuffer sb = new StringBuffer();
        char[] c = s.toCharArray();
        for (int i = 0; i < c.length; i++) {
            char t = c[i];
            int pos = t - '0';
            if (i + 2 == c.length && t == '1') {
                char t1 = c[i + 1];
                int pos3 = t1 - '0';
                sb.append(" ").append(data2[pos3]);
                break;
            }
            int pos2 = c.length - 1 - i;
            int typeV = type[pos2];
            if (pos > 0) {
                String en = typeV == 0 ? data[pos] : data1[pos];
                sb.append(" ").append(en);
            }
            String temp = data3[pos2];
            switch (temp) {
                case "hundred":
                    if (t != '0') {
                        sb.append(" ").append(temp);
                        char t1 = c[i + 1];
                        char t2 = c[i + 2];
                        if (t1 != '0' || t2 != '0') {
                            sb.append(" ").append("and");
                        }
                    }
                    break;
                case "thousand":
                case "million":
                    if (t != '0') {
                        sb.append(" ").append(temp);
                    } else if (i - 1 >= 0 && c[i - 1] != '0') {
                        sb.append(" ").append(temp);
                    } else if (i - 2 >= 0 && c[i - 2] != '0') {
                        sb.append(" ").append(temp);
                    }
                    break;
            }
        }
        String result = sb.toString().trim();
        System.out.println(result);
    }
}