2023华为OD机试真题-货币单位换算(JAVA、Python、C++)

题目描述:
记账本上记录了若干条多国货币金额,需要转换成人民币分(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)后汇总求和,只保留整数部分。
输出格式只有整数数字,不带小数,不带单位。
补充说明:
输出格式只有数字,不带单位
 收起
示例1
输入:
1
100CNY
输出:
10000
说明:
100CNY转换后是10000fen,所以输出结果为10000
示例2
输入:
1
3000fen
输出:
3000
说明:
3000fen,结果就是3000
示例3
输入:
1
123HKD
输出:
10000
说明:
HKD与CNY的汇率关系是123:100,所以换算后,输出结果为10000
示例4
输入:
2
20CNY53fen
53HKD87cents
输出:
6432
说明:
20元53分+53港元87港分,换算成人民币分后汇总,为6432
 

import java.util.Scanner;
 
public class Main {
 
    public static double get( String s, int y, int x) {
        double sum = 0;
        double f = Double.parseDouble(s.substring(y, x));
        if (s.charAt(x) == 'C')
            sum = sum + f;
        else if (s.charAt(x) == 'f') sum += f / 100;
        else if (s.charAt(x) == 'E') sum += f / 0.14; //100:14
        else if (s.charAt(x) == 'e') sum += f / 0.14 / 100;
        else if (s.charAt(x) == 'G') sum += f / 0.12; //100:12
        else if (s.charAt(x) == 'p') sum += f / 0.12 / 100;
        else if (s.charAt(x) == 'J') sum += f / 18.25; //100:1825
        else if (s.charAt(x) == 's') sum += f / 18.25 / 100;
        else if (s.charAt(x) == 'H') sum += f / 1.23; //100:123
        else if (s.charAt(x) == 'c') sum += f / 1.23 / 100; //
 
        return sum;
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
 
        int n = in.nextInt();
        in.nextLine();
        double sum = 0;
        while (n-- > 0) {
            String s = in.nextLine();
            int x = 0;
            while ((s.charAt(x) >= '0' && s.charAt(x) <= '9') || s.charAt(x) == '.') {
                x++;
            }
            int y = x;
            while (y < s.length() && ((s.charAt(y) >= 'a' && s.charAt(y) <= 'z') ||
                                      (s.charAt(y) >= 'A' && s.charAt(y) <= 'Z')))
                y++;
            if (y == s.length()) {
                sum = sum + get(s, 0, x);
            } else {
                sum = sum + get(s, 0, x);
                x = y;
                while ((s.charAt(x) >= '0' && s.charAt(x) <= '9') || s.charAt(x) == '.')
                    x++;
                sum = sum + get(s, y, x);
            }
        }
        long ans = (long)(sum * 100);
 
        System.out.println(ans);
    }
 
 
}
T = int(input())
Y = ['CNY', 'HKD', 'JPY', 'EUR', 'GBP']
F = ['fen', 'cents', 'sen', 'eurocents', 'pence']
cost = [100, 123, 1825, 14, 12]
result = 0
for k in range(T):
    st = input()
    left = 0
    for i in range(5):
        if Y[i] in st:
            num =''
            j = 0
            while st[j] >= '0' and st[j]<= '9':
                num = num + st[j]
                j = j + 1
            num = int(num)
            result = result + num * 100/cost[i] * cost[0]
            while j < len(st) and not (st[j] >= '0' and st[j] <= '9'):
                j = j + 1
            left = j
    for i in range(4, -1, -1):
        if F[i] in st:
            num = ''
            j = left
            while st[j] >= '0' and st[j] <= '9':
                num = num + st[j]
                j = j + 1
            num = int(num)
            result = result + num/cost[i] * cost[0]
            break
print(int(result))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值