先解释步骤:
1.将输入的数字,按3位划分
2.每3位数字进行判断输出,内部划分情况1位数,2位数和3位数的情况;
3.在美3位数字输出时,加上位数判断,如billion,million,thousand。
个人感觉较为麻烦的步骤是将输入数字划分为3位数:
1.如果输入的数字为1,100 123,111,如此带逗号的方式,则直接String.split即可;
2.如果输入的数字无逗号,则需要手动划分,此时灵活运用整形的除法和取模,可以快速得到结果;如果使用字符串substring,则比较难实现(具体可参考以下代码)
import java.util.*; public class Main { //准备数据 static List<String> list1 = Arrays.asList("", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "senventeen", "eighteen", "nineteen", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"); static List<String> list2 = Arrays.asList( "", "thousand", "million", "billion"); public static void main(String[] args) { Scanner scan = new Scanner(System.in); // String input = scan.nextLine(); // StringBuilder sb = new StringBuilder(input).reverse(); // int count = 0; // for (int i = 0; i < sb.length(); i++) { // if (Character.isDigit(sb.charAt(i))) { // count++; // } else { // continue; // } // if (count % 3 == 0 && i<sb.length()-1) sb.insert(i + 1, ','); // } // String[] inputs = sb.reverse().toString().split("\\,"); //以上划分3位数的方法过于麻烦 long input = scan.nextLong(); List<String> list = new ArrayList<>(); if (input / 1000000 > 0) list.add(String.valueOf(input / 1000000)); if (input / 1000 > 0) list.add(String.valueOf(input % 1000000 / 1000)); list.add(String.valueOf(input % 1000)); String[] inputs = list.toArray(new String[list.size()]); //每三位进行输出,注意0的存在 for (int i = 0; i < inputs.length; i++) { String discription = list2.get((inputs.length - i - 1)); System.out.print(output(inputs[i]) + " " + discription + " "); } } //每三位进行判断输出,最终结果只需加list2中的后缀 public static String output(String input) { //按位数进行输出判断 if (input.length() == 1) { return list1.get(Integer.parseInt(input)); } else if (input.length() == 2) { //前方不可能有0 int num = Integer.parseInt(input); if (num < 21) { return list1.get(num); } else if (num % 10 != 0) { return list1.get(18 + num / 10) + " " + list1.get(num % 10); } else { return list1.get(18 + num / 10) + list1.get(num % 10); } } else if (input.length() == 3) { //判断前方以0开头,若以0开头,则去0 if (input.matches("^0[0-9]+")) { input = input.replaceAll("^0+", ""); return output(input); } else { //若为三位数 int num = Integer.parseInt(input); if (num % 100 != 0) { return list1.get(num / 100) + " hundred and " + output(String.valueOf( num % 100)); } else { return list1.get(num / 100) + " hundred"; } } } return "-1"; } }