题解 | #学英语#
学英语
https://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextLong()) { // 注意 while 处理多个 case
long a = in.nextLong();
System.out.println(readMethod(a));
}
}
//获取一个long型整数(小于等于12位)3位分割
public static LinkedHashMap<String, Integer> getHashMap(long num) {
LinkedHashMap<String, Integer> result = new LinkedHashMap<String, Integer>();
result.put("billion", 0);
result.put("million", 0);
result.put("thousand", 0);
result.put("", 0);
result.put("billion", (int)(num / 1000000000));
result.put("million", (int)(num % 1000000000 / 1000000));
result.put("thousand", (int)(num % 1000000 / 1000));
result.put("", (int)(num % 1000));
return result;
}
//获取一个三位数的读法,245 --> two thousand and forty five;
public static String getNum(int num) {
HashMap<Integer, String> table = new HashMap<Integer, String>();
table.put(0, "");
table.put(1, "one");
table.put(2, "two");
table.put(3, "three");
table.put(4, "four");
table.put(5, "five");
table.put(6, "six");
table.put(7, "seven");
table.put(8, "eight");
table.put(9, "nine");
table.put(10, "ten");
table.put(11, "eleven");
table.put(12, "twelve");
table.put(13, "thirteen");
table.put(14, "fourteen");
table.put(15, "fifteen");
table.put(16, "sixteen");
table.put(17, "seventeen");
table.put(18, "eighteen");
table.put(19, "nineteen");
table.put(20, "twenty");
table.put(30, "thirty");
table.put(40, "forty");
table.put(50, "fifty");
table.put(60, "sixty");
table.put(70, "seventy");
table.put(80, "eighty");
table.put(90, "ninety");
/*
* 根据num的大小,分为百位为0 or [1-9],个位十位分为00,小于20,大于19
* 一共6种情况
*/
int num1 = num / 100;
int num2 = num / 10 % 10;
int num3 = num % 10;
int num4 = num % 100;
if (num1 == 0) {
if (num4 < 20) {
return " " + table.get(num4) + " ";
} else {
return " " + table.get(num2 * 10) + " " + table.get(num3) + " ";
}
} else {
if (num4 == 0) {
return " " + table.get(num1) + " hundred ";
} else if (num4 > 0 && num4 < 20) {
return " " + table.get(num1) + " hundred and " + table.get(num4) + " ";
} else {
return " " + table.get(num1) + " hundred and " + table.get(
num2 * 10) + " " + table.get(num3) + " ";
}
}
}
//获取输入long型整数(小于等于12位)的读法
public static String readMethod(long num) {
LinkedHashMap<String, Integer> map = getHashMap(num);
Set<String> set = map.keySet();
StringBuilder sb = new StringBuilder();
for (String s : set) {
int i = map.get(s);
if (i != 0) {
sb.append(getNum(i)).append(" ").append(s).append(" ");
}
}
String result = sb.toString();
result = result .replaceAll("\\s+", " ");
result = result .replaceAll("^\\s", "");
result = result .replaceAll("\\s$", "");
return result;
}
}
查看2道真题和解析