目录
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、解题思路
- 五、Python算法源码
- 六、效果展示
- 1、输入
- 2、输出
- 3、思路分析
- 4、输入
- 5、输出
- 6、思路分析
一、题目描述
记账本上记录了若干条多国货币金额,需要转换成人民币分 (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) 后汇总求和,只保留整数部分输出格式只有整数数字,不带小数,不带单位。
四、解题思路
- 读取输入的记录数 N;
- 创建一个变量 total,用于存储汇总结果;
- 使用正则表达式匹配每条记录中的金额和货币单位;
- 根据货币单位和对应的汇率,将金额转换成人民币分;
- 将转换后的金额加到 total 中;
- 输出 total 的整数部分,舍弃小数部分。
五、Python算法源码
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))
六、效果展示
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机试真题 Python 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(Python)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。