dcddc

西米大人的博客

0%

汉字读数

题目描述

给出一个汉字描述的数字,要求将其转化为普通数字。
例子:一千两百三十四万五千六百七十八
输出: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;
}

考察点

  • 逻辑题