首页 > 试题广场 >

简单表达式计算

[编程题]简单表达式计算
  • 热度指数:4590 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给定一个合法的表达式字符串,其中只包含非负整数、加法、减法以及乘法符号(不会有括号),例如7+3*4*5+2+4-3-1,请写程序计算该表达式的结果并输出;


输入描述:
输入有多行,每行是一个表达式,输入以END作为结束


输出描述:
每行表达式的计算结果
示例1

输入

7+3*4*5+2+4-3-1
2-3*1
END

输出

69
-1

备注:
每个表达式的长度不超过10000,保证所有中间结果和最后结果在[-2e9,2e9]范围内
两种方法
方法一:eval
这种方法倒是快,笔试如果题目没说明可以直接用,面试就别搞了会死得很惨的
class MainActivity:

    def main(self):
        while True:
            # Read the data
            s = input()
            if s == 'END':
                break
            # Get the result
            result = eval(s)
            print(result)


if __name__ == '__main__':
    M = MainActivity()
    M.main()
方法二:用栈模拟
加法入栈,减法取负入栈,乘法就pop一个元素出来完成乘法后再入栈,最后求和栈中的所有元素。需要注意的是操作具有一个操作符的滞后性。
class MainActivity:

    def main(self):
        while True:
            # Read the data
            s = input()
            if s == 'END':
                break
            # Initialization
            stack = []
            negativeFlag = False
            timesFlag = False
            numCache = []
            # Traverse
            for char in s:
                if char == '+':
                    num = int(''.join(numCache))
                    numCache = []
                    if negativeFlag:
                        num = -num
                    if timesFlag:
                        stack.append(num * stack.pop())
                    else:
                        stack.append(num)
                    timesFlag = False
                    negativeFlag = False
                elif char == '-':
                    num = int(''.join(numCache))
                    numCache = []
                    if negativeFlag:
                        num = -num
                    if timesFlag:
                        stack.append(num * stack.pop())
                    else:
                        stack.append(num)
                    timesFlag = False
                    negativeFlag = True
                elif char == '*':
                    num = int(''.join(numCache))
                    numCache = []
                    if negativeFlag:
                        num = -num
                    if timesFlag:
                        stack.append(num * stack.pop())
                    else:
                        stack.append(num)
                    timesFlag = True
                    negativeFlag = False
                else:
                    numCache.append(char)
            if numCache:
                num = int(''.join(numCache))
                numCache = []
                if negativeFlag:
                    num = -num
                if timesFlag:
                    stack.append(num * stack.pop())
                else:
                    stack.append(num)
            # Get the result
            result = sum(stack)
            print(result)


if __name__ == '__main__':
    M = MainActivity()
    M.main()
发表于 2024-09-02 12:40:44 回复(0)

热门推荐

通过挑战的用户

查看代码
简单表达式计算