题解 | #学英语#
学英语
https://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc
直接将数字三位作为一份进行解析,然后需要慢慢的进行调试,细节比较多
public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ long n = sc.nextLong(); String result = solution(n); System.out.println(result); } } static Map<Integer,String> map = new HashMap<Integer,String>(){{ put(1,"one");put(2,"two");put(3,"three");put(4,"four"); put(5,"five");put(6,"six");put(7,"seven");put(8,"eight"); put(9,"nine"); }}; static Map<Integer,String> map1 = new HashMap<Integer,String>(){{ put(1,"eleven");put(2,"twelve");put(3,"thirteen");put(4,"fourteen"); put(5,"fifteen");put(6,"sixteen");put(7,"seventeen");put(8,"eighteen"); put(9,"nineteen");put(0,"ten"); }}; static Map<Integer,String> map10 = new HashMap<Integer,String>(){{ put(1,"ten");put(2,"twenty");put(3,"thirty");put(4,"forty"); put(5,"fifty");put(6,"sixty");put(7,"seventy");put(8,"eighty"); put(9,"ninety"); }}; static String[] unit = {"ten", "hundred", "thousand", "million", "billion", "and"}; public static String solution(long n){ StringBuilder result = new StringBuilder(); int power = 0; while(n > 0){ StringBuilder sb = new StringBuilder(); int curr = (int)n % 1000; int gewei = curr % 10; int shiwei = curr / 10 % 10; int baiwei = curr / 100 % 10; if(baiwei != 0){ sb.append(map.get(baiwei)).append(" ").append(unit[1]); } if(shiwei != 0){ if(baiwei != 0){ sb.append(" and"); } if(sb.length() != 0){ sb.append(" "); } if(shiwei != 1){ sb.append(map10.get(shiwei)); }else{ //十位等于1需要另外处理 sb.append(map1.get(gewei)); } } if(gewei != 0 && shiwei != 1){ //十位等于1已经十位数处处理过了 if(shiwei == 0 && baiwei != 0){ sb.append(" and"); } if(sb.length() != 0){ sb.append(" "); } sb.append(map.get(gewei)); } if(sb.length() != 0){ if(power >= 1){ result.insert(0, " "); result.insert(0, unit[ 1 + power % 4]); } result.insert(0, " "); result.insert(0, sb.toString()); } power++; n = n / 1000; } return result.toString(); } }