看到表达式求值,本蒟蒻就想到了用 Python 水过。。。
因为本题会出现括号不匹配的情况,不能直接用 eval()
函数水过,所以本蒟蒻就想到了用添括号的方法
最简单的括号匹配的思想,用栈维护。
如果中途出现不匹配的情况,因为只可能是)
多,所以就在字符串前面加(
。
最后如果栈不为空,则在字符串后面添)
。
然后成功水过
代码
t = input().replace('^','**').replace('/','//')
r = t
top = 0
for c in t:
if c == ')':
if top > 0: top -= 1
else: r = '(' + r
elif c == '(': top += 1
if top > 0:
for i in range(top): r += ')'
print(eval(r))
说汉语的 Python 代码
字符串 = input().replace('^','**').replace('/','//')
结果字符串 = 字符串
栈顶 = 0
for 字符串中的元素 in 字符串:
if 字符串中的元素 == ')':
if 栈顶 > 0: 栈顶 -= 1
else: 结果字符串 = '(' + 结果字符串
elif 字符串中的元素 == '(': 栈顶 += 1
if 栈顶 > 0:
for 循环变量 in range(栈顶): 结果字符串 += ')'
print(eval(结果字符串))