英语里面数数还比较复杂,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);
}
}

京公网安备 11010502036488号