题目描述
记账本上记录了若干条多国货币金额,需要转换成人民币分 (fen),汇总后输出每行记录一条金额,金额带有货币单位,格式为数字+单位,可能是单独元,或者单独分,或者元与分的组合要求将这些货币全部换算成人民币分 (fen) 后进行汇总,汇总结果仅保留整数,小数部分舍弃。元和分的换算关系都是1:100,如下: 1CNY=100fen (1元=100分) 1HKD=100cents (1港元=100港分) 1JPY=100sen (1日元=100仙) 1EUR=100eurocents (1欧元=100欧分) 1GBP=100pence (1英镑=100便士) 汇率表如下: 100CNY=1825JPY=123HKD=14EUR=12GBP。
输入描述
第一行输入为N,N表示记录数。0<N<100之后N行,每行表示一条货币记录,且该行只会是一种货币。
输出描述
将每行货币转换成人民币分 (fen) 后汇总求和,只保留整数部分输出格式只有整数数字,不带小数,不带单位。
用例
【用例一】
输入
1
2CNY30fen
输出
230
说明
2 CNY = 2×100 = 200 fen 30 fen = 30 汇总:200 + 30 = 230 fen
【用例二】
输入
3
1EUR
100JPY
50HKD
输出
5327
说明
1 EUR = 10000/14 ≈ 714.2857 fen 100 JPY = 100×(10000/1825) ≈ 547.945 fen 50 HKD = 50×(10000/123) ≈ 4065.04 fen 汇总:714.2857 + 547.945 + 4065.04 ≈ 5327.27 舍去小数部分 → 5327
Python代码实现
import math
import re
from typing import List
## 100CNY=1825JPY=123HKD=14EUR=12GBP。
def cn_to_fen(x, y):
return x * 1000 + y
def hk_to_fen(x, y):
value = float(format((x * 100 + y) / (123 / 100), '.5f'))
return value
def jp_to_fen(x, y):
value = float(format((x * 100 + y) / (1825 / 100), '.5f'))
return value
def eu_to_fen(x, y):
value = float(format((x * 100 + y) / (14 / 100), ".5f"))
return value
def gb_to_fen(x, y):
value = float(format((x * 100 + y) / (12 / 100), ".5f"))
return value
def main(n, arr: List[str]):
total = 0
for s in arr:
# 这里不能使用 \w+,因为\w是字符类匹配,会匹配任何字母数字字符(包括下划线)即[a-zA-Z0-9_]
result = re.findall(r"\d+|[a-zA-Z]+", s)
print(result)
x = int(result[0])
if len(result) == 4:
y = int(result[2])
else:
y = 0
p = result[1].lower()
print(f"x,y:{type(x)} {type(y)}")
if p == 'cny':
total += cn_to_fen(x, y)
elif p == "hkd":
total += hk_to_fen(x, y)
elif p == "jpy":
total += jp_to_fen(x, y)
elif p == "eur":
total += eu_to_fen(x, y)
else:
total += gb_to_fen(x, y)
print(total)
print(math.floor(total))
if __name__ == '__main__':
n = 3
arr = ["1EUR", "100JPY", "50HKD"]
main(n, arr)