题目描述
已知火星人使用的运算符号为 # 、 $
他们与地球人的等价公式如下:
x#y=4*x+3*y+2x$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$5432132 位整数溢出
输出描述
根据火星人字符串输出计算结果 结尾不带回车换行
示例一

核心知识点
- 使用正则表达式将输入字符串分为两个列表:数字列表和操作符列表。
- 使用
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