这个题需要注意的两个点
一个是 空格 (\doge 我特别想全加上空格 然后把两个及以上的空格替换成一个空格 最后再trim()一下 这样会少些很多判断)
一个是 and
import java.util.*; public class Main { static String[] N1_20 = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten","eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty"}; static String[] N10_TIMES = {"", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"}; static String[] POWER = {"", " thousand ", " million ", " billion "}; public static void main(String[] args) { Scanner in = new Scanner(System.in); String[] strs = String.format("%,d", in.nextInt()).split(","); String s = ""; for (int i = strs.length - 1, j = 0; i >= 0; i--, j++) { s = three(Integer.parseInt(strs[i])) + POWER[j] + s; } System.out.println(s); } static String three(int x) { String s = ""; s = (x / 100) > 0 ? s + N1_20[x / 100] + " hundred" : s; s += two(x % 100, (x / 100) > 0); return s; } static String two(int a, boolean flag) { if (a > 20) { // 如果百位是0 就没有and 如果个位是0 就不加空格 return (flag ? " and " : "") + N10_TIMES[a / 10] + (a % 10 > 0 ? " " + N1_20[a % 10] : ""); } else if (a > 0) { return (flag ? " and " : "") + N1_20[a]; } else { return ""; } } }