【每日编程-342期】224. 基本计算器(天大上机铺垫)

教育   2024-11-01 10:03   广西  

224. 基本计算器(天大上机铺垫)


每日编程中遇到任何疑问、意见、建议请公众号留言或直接撩Q474356284(备注每日编程)



实现一个基本的计算器来计算一个简单的字符串表达式的值。

字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -非负整数和空格  

示例 1:

输入: "1 + 1"
输出: 2

示例 2:

输入: " 2-1 + 2 "
输出: 3

示例 3:

输入: "(1+(4+5+2)-3)+(6+8)"
输出: 23

说明:

  • 你可以假设所给定的表达式都是有效的。

  • 不要使用内置的库函数 eval


解决方法:

(1)算法的基本思想:

使用数字栈和符号栈。鉴于此题只有加减,可用sign为正负1指示符号栈。

(2)代码实现:

class Solution
{

public:
    int calculate(string s)
    
{
        stack<long> nums, ops;
        long num = 0;
        long res = 0;
        int sign = 1;
        for (char c : s)
        {
            //如果c是数字的话(仅有正数),按位读取,比如21,第一次读取2,第二次读取1
            //最后得到的是long num = 21;
            if (isdigit(c))
            {
                num = num * 10 + c - '0';
            }
            else
            {
                res += sign * num;
                num = 0;
                if (c == '+')
                    sign = 1;
                if (c == '-')
                    sign = -1;
                if (c == '(')
                {
                    nums.push(res); //保存之前的数字计算结果
                    ops.push(sign); //保存括号外面的符号
                    res = 0;        //重置res
                    sign = 1;       //重置sign
                }
                if (c == ')')
                {
                    //取栈头sign和res的结果与num中保存的上次结果相加
                    res = ops.top() * res + nums.top();
                    ops.pop();
                    nums.pop();
                }
            }
        }
        res += sign * num; //最后一次计算
        return res;
    }
};

明日预告:227.基本计算器II(天大上机铺垫)

实现一个基本的计算器来计算一个简单的字符串表达式的值。

字符串表达式仅包含非负整数,+, - ,*/ 四种运算符和空格  。整数除法仅保留整数部分。

示例 1:

输入: "3+2*2"
输出: 7

示例 2:

输入: " 3/2 "
输出: 1

示例 3:

输入: " 3+5 / 2 "
输出: 5

说明:

  • 你可以假设所给定的表达式都是有效的。

  • 不要使用内置的库函数 eval

class Solution {
public:
    int calculate(string s) {

    }
};


灰灰考研
最全的【计算机考研】【软件考研】考研信息! 最丰富的共享资料! 最大程度上帮助学渣狗登上研究生大门!
 最新文章