火星文计算
题目
已知火星人使用的运算符号为 #
、 $
他们与地球人的等价公式如下:
x#y=4*x+3*y+2
x$y=2*x+y+3
其中 x
y
是无符号整数
地球人公式按照 C 语言规则进行计算
火星人公式中 #
符优先级高于 $
相同的运算符按从左到右的顺序运算
输入
火星人字符串表达式结尾不带回车换行
输入的字符串说明:
字符串为仅有无符号整数和操作符组成的计算表达式
-
用例保证字符串中操作数与操作符之间没有任何分隔符
-
用例保证操作数取值范围为 32 位无符号整数
-
保证输入以及计算结果不会出现整型溢出
-
保证输入的字符串为合法的求值报文
例如:123#4$5#76$78
-
保证不会出现非法的求值报文
例如:
#4$5
这种缺少操作数;4$5#
这种缺少操作数;4#$5
这种缺少操作数;4 $5
有空格;3+4-5*6/7
有其他操作符;12345678987654321$54321
32 位整数溢出
输出
根据火星人字符串输出计算结果
结尾不带回车换行
示例一
输入
7#6$5#12
输出
157
说明
7#6$5#12=(4*7+3*6+2)$5#12
=48$5#12
=48$(4*5+3*12+2)
=48$58
=2*48+58+3
=157
Code
import re
ps = '7#6$5#12'
fl = re.split('([#$])', ps)
# print(fl)
fl2, fl3 = [], 0
zt = 0
for i, v in enumerate(fl):
if v == '#':
zt = 1
elif v == '$':
zt = 0
fl2.append('$')
elif zt == 0:
fl2.append(v)
elif zt == 1:
fl2.append(4 * int(fl2.pop()) + 3 * int(v) + 2)
# print(fl2)
for i, v in enumerate(fl2):
if not fl3:
fl3 = int(v)
elif v != '$':
fl3 = 2 * fl3 + int(v) + 3
print(fl3)