题目描述
已知火星人使用的运算符为#、$,其与地球人的等价公式如下:
x#y = 4x+3y+2
xKaTeX parse error: Expected 'EOF', got '#' at position 48: …C语言规则计算 火星人公式中,#̲的优先级高于,相同的运算符,按从左到右的顺序计算
现有一段火星人的字符串报文,请你来翻译并计算结果。
输入描述
火星人字符串表达式(结尾不带回车换行)
输入的字符串说明: 字符串为仅由无符号整数和操作符(#、$)组成的计算表达式。例如:
123#4$5#67$78
用例保证字符串中,操作数与操作符之间没有任何分隔符。
用例保证操作数取值范围为32位无符号整数。
保证输入以及计算结果不会出现整型溢出。
保证输入的字符串为合法的求值报文,例如:123#4$5#67$78
保证不会出现非法的求值报文,例如类似这样字符串:
#4$5 //缺少操作数
4$5# //缺少操作数
4#$5 //缺少操作数
4 $5 //有空格
3+4-5*6/7 //有其它操作符
12345678987654321$54321 //32位整数计算溢出
输出描述
根据输入的火星人字符串输出计算结果(结尾不带回车换行)
用例1
输入
7#6$5#12
输出
157
说明
7#6$5#12
=(47+36+2)$5#12
=48$5#12
=48$(45+312+2)
=48$58
=2*48+58+3
=157
import re
s = input()
def getresult(s):
# 定义正则表达式模式匹配数字,#和数字
p = re.compile('(\\d+)#(\\d+)')
while True:
m = p.search(s) # 在字符串s中查找匹配的模式
if m:
subs = m.group()#获取匹配到的完整字符串(例如 "12#34")
x = int(m.group(1))
y = int(m.group(2))
# # 将匹配项替换为计算结果,这里是 4 * x + 3 * y + 2
s = s.replace(subs,str(4*x+3*y+2),1)# 只替换第一个匹配
else:
break
# 将字符串以"$"为分割符划分,得到一个字符串列表,然后转为整数列表
arr = list(map(int,s.split('$')))
x = arr[0]# 取第一个元素作为初始值 x
for y in arr[1:]:
x = 2*x+y+3
return x
print(getresult(s))