一、题目描述
记账本上记录了若干条多国货币金额,需要转换成人民币分 (fen),汇总后输出每行记录一条金额,金额带有货币单位,格式为数字+单位,可能是单独元,或者单独分,或者元与分的组合要求将这些货币全部换算成人民币分 (fen) 后进行汇总,汇总结果仅保留整数,小数部分舍弃。元和分的换算关系都是1:100,如下:
- 1CNY=100fen (1元=100分)
- 1HKD=100cents (1港元=100港分)1JPY=100sen (1日元=100仙)
- 1EUR=100eurocents (1欧元=100欧分)
- 1GBP=100pence (1英镑=100便士)
汇率如下表:
CNY | JPY | HKD | EUR | GBP |
---|---|---|---|---|
100 | 1825 | 123 | 14 | 12 |
即100CNY=1825JPY=123HKD=14EUR=12GBP
。
二、输入描述
第一行输入为N,N表示记录数。0<N<100之后N行,每行表示一条货币记录,且该行只会是一种货币。
三、输出描述
将每行货币转换成人民币分 (fen) 后汇总求和,只保留整数部分输出格式只有整数数字,不带小数,不带单位。
四、Java算法源码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double total = 0.0;
int count = Integer.parseInt(sc.nextLine());
Pattern pattern = Pattern.compile("(\\d+(?:\\.\\d+)?)([A-Za-z]+)");
for (int i = 0; i < count; i++) {
String line = sc.nextLine();
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
double amount = Double.parseDouble(matcher.group(1));
String currency = matcher.group(2);
total += exchange(currency, amount);
}
}
System.out.println(Math.round(Math.floor(total)));
}
private static double exchange(String currency, double amount) {
Map<String, Double> map = new HashMap<String, Double>() {{
put("CNY", 100.0);
put("fen", 1.0);
put("JPY", 10000.0 / 1825);
put("sen", 100.0 / 1825);
put("HKD", 10000.0 / 123);
put("cents", 100.0 / 123);
put("EUR", 10000.0 / 14);
put("eurocents", 100.0 / 14);
put("GBP", 10000.0 / 12);
put("pence", 100.0 / 12);
}};
return map.getOrDefault(currency, 0.0) * amount;
}
五、效果展示
1、输入
1
100CNY
2、输出
10000
3、思路分析
100CNY转换后是10000fen,所以输出10000。
4、输入
2
10CNY60fen
99HKD88cents
5、输出
9180
6、思路分析
2
10CNY60fen
99HKD88cents
演变为
10元60分+99港元88港分
演变为
10100+60+9910000/123 +88*100/123
输出
9180
🏆本文收录于,华为OD机试2023(Java)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。