栈+数学运算 | HJ50 四则运算
# 最优解 while True: try: express = input() express.replace("[", "(") express.replace("{", "(") express.replace("]", ")") express.replace("}", ")") print(eval(express)) except: break # 我的代码 while True: try: s = input() num_stack = [] sig_stack = [] i = 0 while i < len(s): ch = s[i] if ch.isdigit(): j = i+1 while j<len(s) and s[j].isdigit(): j += 1 num_stack.append(s[i:j]) i = j continue elif ch == "+" or ch == "-": # 运算符为加减时,先看栈中有无乘除 while sig_stack and sig_stack[-1] in ["*", "/"]: # 弹出乘除得计算结果,再存入加减运算符 num2, num1 = num_stack.pop(), num_stack.pop() new_num = eval(f"{num1}{sig_stack.pop()}{num2}") num_stack.append(new_num) if ch == '-': if s[i - 1] not in ['{', '(', '[']: # 负数前添加'+'运算符,除括号内首数字 sig_stack.append('+') num_stack.append(-1) sig_stack.append('*') else: sig_stack.append(ch) elif ch == "*" or ch == "/": sig_stack.append(ch) elif ch in ["{", "(", "["]: sig_stack.append(ch) else: sig = sig_stack.pop() while sig not in ["{", "(", "["]: num2, num1 = num_stack.pop(), num_stack.pop() new_num = eval(f"{num1}{sig}{num2}") num_stack.append(new_num) sig = sig_stack.pop() i += 1 while sig_stack: sig = sig_stack.pop() num2, num1 = num_stack.pop(), num_stack.pop() new_num = eval(f"{num1}{sig}{num2}") num_stack.append(new_num) print(int(num_stack[0])) except: break
用时:2h
华为笔试刷题 文章被收录于专栏
高质量题: 1~40:HJ16,HJ22,HJ24,HJ26,HJ27,HJ28,HJ35,HJ37,HJ39; 40~80:HJ41,HJ42,HJ43,HJ44,HJ48,HJ50,HJ52,HJ53,HJ57,HJ61,HJ63,HJ64,HJ70,HJ71,HJ74,HJ77; 80~108:HJ82,HJ85,HJ88,HJ89,HJ93,HJ95,HJ98,HJ103,HJ107