题目描述
已知火星人使用的运算符号为 #
、 $
他们与地球人的等价公式如下:
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 位整数溢出
输出描述
根据火星人字符串输出计算结果 结尾不带回车换行
示例一
核心知识点
- 使用正则表达式将输入字符串分为两个列表:数字列表和操作符列表。
- 使用
while
循环实现对 “#” 操作符的计算。 - 调用
sharp
和dollar
函数对数字进行运算,并得到最终结果。 - 将最终结果通过
print
语句输出。
Python实现
import re
def solve_method(input):
operators = re.findall(r'\W+', input)
nums = list(map(int, re.findall(r'\d+', input)))
pos_s = operators.index("#")
while pos_s != -1:
tmp = f1(nums[pos_s], nums[pos_s + 1])
nums[pos_s] = tmp
nums.pop(pos_s + 1)
operators.pop(pos_s)
pos_s = operators.index("#") if "#" in operators else -1
res = nums[0]
for i in range(1, len(nums)):
res = f2(res, nums[i])
print(res)
def f1(x, y):
return 4 * x + 3 * y + 2
def f2(x, y):
return 2 * x + y + 3
input_str = input()
solve_method(input_str)
输出:
7#6$5#12
157