看到各位大佬的恐怖码量,相信一定有人和本菜鸡一样不寒而栗:

图片说明

看到这种题,cpp要手动模拟,要写当然也可以,只是很麻烦

懒癌发作不想写怎么办?
图片说明

用python!众所周知解释型语言的eval真是好用。

冲冲冲:

a=input().replace('^','**')
a=a.replace('/','//')
print(eval(a))

只能过60%。

这是因为出题人:

还有可能出现多余括号情况

直接eval会被卡,那就字符串处理一下,删掉多余的左括号和右括号就好了。

str似乎不可以精准pop,但是转成list以后就可以精准删除指定位置的元素了

a=input().replace('^','**')
a=a.replace('/','//')
cnt=0
r=[] # 多余的右括号下标
for i in range(len(a)) :
    if a[i]=='(' : cnt+=1 # 其实就是栈
    elif a[i]==')' :
        if cnt==0 : r.append(i)
        else :cnt-=1
la=list(a)
for i in r:la.pop(i)
n=len(la)
cnt=0
l=[] # 多余的左括号下标
for i in range(n):
    if la[n-1-i]==')' : cnt+=1
    elif la[n-1-i]=='(' :
        if cnt==0 : l.append(n-1-i)
        else : cnt-=1
for i in l : la.pop(i)
a=''.join(la) # 转换回字符串
print(eval(a))

没有代码格式化是因为懒得打开vscode直接在牛客写的

感谢@小鸣壹号 同学的指正,上面的代码出现了一个问题,也就是在清除右括号下标的时候,没有按照从后往前的顺序pop,这导致了存在多个右括号时的索引错位的状况。

修改后的代码如下:

a = input().replace('^', '**')
a = a.replace('/', '//')
cnt = 0
r = []  # 多余的右括号下标
for i in range(len(a)):
    if a[i] == '(': cnt += 1  # 其实就是栈
    elif a[i] == ')':
        if cnt == 0: r.append(i)
        else: cnt -= 1
la = list(a)
for i in r[::-1]: la.pop(i)
n = len(la)
cnt = 0
l = []  # 多余的左括号下标
for i in range(n):
    if la[n - 1 - i] == ')': cnt += 1
    elif la[n - 1 - i] == '(':
        if cnt == 0: l.append(n - 1 - i)
        else: cnt -= 1
for i in l: la.pop(i)
a = ''.join(la)  # 转换回字符串
print(eval(a))

相较于原来的代码修改了第十一行:

for i in r:la.pop(i)
for i in r[::-1]: la.pop(i)

再提高一下鲁棒性

a = input().replace('^', '**')
a = a.replace('/', '//')
a = a.replace(' ', '')
a = a.replace('()', '')
cnt = 0
r = []  # 多余的右括号下标
for i in range(len(a)):
    if a[i] == '(': cnt += 1  # 其实就是栈
    elif a[i] == ')':
        if cnt == 0: r.append(i)
        else: cnt -= 1
la = list(a)
for i in r[::-1]:
    la.pop(i)
n = len(la)
cnt = 0
l = []  # 多余的左括号下标
for i in range(n):
    if la[n - 1 - i] == ')': cnt += 1
    elif la[n - 1 - i] == '(':
        if cnt == 0: l.append(n - 1 - i)
        else: cnt -= 1
for i in l:
    la.pop(i)
a = ''.join(la)  # 转换回字符串
print(eval(a))