先解释步骤:
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";
}
}

京公网安备 11010502036488号