当前位置: 首页 > 面试经验 >

【华为OD机试2023】货币单位换算(Python)

优质
小牛编辑
165浏览
2023-03-28

【华为OD机试2023】货币单位换算(Python)

题目描述:

记账本上记录了若干条多国货币金额,需要转换成人民币分(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

输入:

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

解题思路:

关键是拆分输入,通过示例,我们可以知道格式为(金额:单位:金额:单位),以此为基础拆分出金额,由于十种货币单位的首字母均不同,所以可以通过首字母来进行分辨到底是什么货币单位。然后将对应的金额进行转换,存进总金额sum

Python中的/会自动将整型转换为浮点型,所以不需要过多得关注数字的类型,只需要在最后将浮点型转为整型即可


n=int(input())
st=[input() for i in range(n)]
sum=0
for line in range(n):
#pre_word用来判定前一个字符是字母还是数字,因为字符串开头必定为数字,按照字符串中字符的排列规律,应该将pre_word初始化为字母,随便取一个字母就行
pre_word='x'
#cash列表用来存储数字,之后用来输出金额
cash=[]
for word in st[line]:
if word.isnumeric():
cash.append(word)
pre_word=word
else:
if pre_word.isnumeric():
if word=='C':
sum+=100*int(''.join(cash))
cash = []
elif word=='f':
sum+=1*int(''.join(cash))
cash = []
elif word == 'H':
sum+=int(''.join(cash))/123*10000
cash = []
elif word == 'c':
sum+=int(''.join(cash))/123*100
cash = []
elif word == 'J':
sum+=int(''.join(cash))/1825*10000
cash = []
elif word == 's':
sum+=int(''.join(cash))/1825*100
cash = []
elif word == 'E':
sum+=int(''.join(cash))/14*10000
cash = []
elif word == 'e':
sum+=int(''.join(cash))/14*100
cash = []
elif word == 'G':
sum+=int(''.join(cash))/12*10000
cash = []
elif word == 'p':
sum+=int(''.join(cash))/123*100
cash = []
pre_word=word
print(int(sum))

#华为机试,emo了#
 类似资料: