题目描述
给出一个汉字描述的数字,要求将其转化为普通数字。
例子:一千两百三十四万五千六百七十八
输出:12345678
思路
逻辑题
读到”亿”和”万”,就将前面已经读到的数字都乘以指定的进制。
读到”十””百””千”,将前一个数字乘以指定的进制后加到结果中
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| static long transfer(String str) { String[] num = {"一","二","三","四","五","六","七","八","九"}; String[] jinzhi = {"十","百","千"}; ArrayList<String> numL = new ArrayList<>(Arrays.asList(num)); // 数字集合 ArrayList<String> jinzhiL = new ArrayList<>(Arrays.asList(jinzhi)); // 进制集合 long res = 0; ArrayList<Integer> hasReadNum = new ArrayList<>(); boolean hasAdd = false; // 最近一次读到的数字是否计算过 for(int i = 0; i < str.length()-1; i++) { char tmp = str.charAt(i); if(numL.contains(tmp+"")) { hasReadNum.add(numL.indexOf(tmp+"")+1); hasAdd = false; }else { if(jinzhiL.contains(tmp+"")) { int jzs = (int)Math.pow(10, jinzhiL.indexOf(tmp+"")+1); res += jzs*hasReadNum.get(hasReadNum.size()-1); hasAdd = true; }else { if((tmp+"").equals("亿")) { if(hasAdd) { // 前一个数字已经累加到res res *= 10000; }else { res += hasReadNum.get(hasReadNum.size()-1); res *= 100000000; } }else if((tmp+"").equals("万")) { if(hasAdd) { res *= 10000; }else { res += hasReadNum.get(hasReadNum.size()-1); res *= 10000; } }else { } } } } String string = str.charAt(str.length()-1) + ""; if(numL.contains(string)) { res += numL.indexOf(string)+1; } return res; }
|
考察点