华为OD机试真题 JavaScript 实现【货币单位换算】【2023Q1 100分】

在这里插入图片描述

一、题目描述

记账本上记录了若干条多国货币金额,需要转换成人民币分 (fen),汇总后输出每行记录一条金额,金额带有货币单位,格式为数字+单位,可能是单独元,或者单独分,或者元与分的组合要求将这些货币全部换算成人民币分 (fen) 后进行汇总,汇总结果仅保留整数,小数部分舍弃。元和分的换算关系都是1:100,如下:

  1. 1CNY=100fen (1元=100分)
  2. 1HKD=100cents (1港元=100港分)1JPY=100sen (1日元=100仙)
  3. 1EUR=100eurocents (1欧元=100欧分)
  4. 1GBP=100pence (1英镑=100便士)

汇率如下表:

CNY JPY HKD EUR GBP
100 1825 123 14 12

100CNY=1825JPY=123HKD=14EUR=12GBP

二、输入描述

第一行输入为N,N表示记录数。0

三、输出描述

将每行货币转换成人民币分 (fen) 后汇总求和,只保留整数部分输出格式只有整数数字,不带小数,不带单位。

四、解题思路

  1. 读取输入的记录数 N;
  2. 创建一个变量 total,用于存储汇总结果;
  3. 使用正则表达式匹配每条记录中的金额和货币单位;
  4. 根据货币单位和对应的汇率,将金额转换成人民币分;
  5. 将转换后的金额加到 total 中;
  6. 输出 total 的整数部分,舍弃小数部分。

五、JavaScript算法源码

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 中
            total += exchange(currency, amount);
        }
    }
    // 输出 total 的整数部分,舍弃小数部分
    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。

华为OD机试真题 JavaScript 实现【货币单位换算】【2023Q1 100分】_第1张图片

4、输入

2
10CNY60fen
99HKD88cents

5、输出

9180

6、思路分析

2
10CNY60fen
99HKD88cents

演变为

10元60分+99港元88港分

演变为

10100+60+9910000/123 +88*100/123

输出

9180

华为OD机试真题 JavaScript 实现【货币单位换算】【2023Q1 100分】_第2张图片


下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(搬砖工逆袭Java架构师,华为od,javascript,开发语言,算法,学习)