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

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

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


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



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

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

示例 1:

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

示例 2:

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

示例 3:

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

说明:

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

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


解决方法:

(1)算法的基本思想:

使用数字栈和符号栈。

(2)代码实现:

//如果代码换行了不妨将屏幕横放哦
class Solution
{

public:
    int calculate(string s)
    
{
        long res = 0, num = 0;
        char op = '+';
        stack<int> nums;
        for (int i = 0; i < s.size(); ++i)
        {
            if (isdigit(s[i]))
            {
                num = num * 10 + s[i] - '0';
            }
            //如果s[i]不是数字不是空格,没计算到末尾
            if ((!isdigit(s[i]) && s[i] != ' ') || i == s.size() - 1)
            {
                if (op == '+')
                    nums.push(num);//存值,因为乘法要先算。
                if (op == '-')
                    nums.push(-num);//存值,举栗子:5-1*4 -> 5+(-1)*4
                if (op == '*' || op == '/')
                {
                    int tmp = (op == '*') ? nums.top() * num : nums.top() / num;
                    nums.pop();
                    nums.push(tmp);
                }
                op = s[i];
                num = 0;//不要忘了重置num
            }
        }
        //进行最后一次计算
        while (!nums.empty())
        {
            res += nums.top();
            nums.pop();
        }
        return res;
    }
};

明日预告:2019年天津大学计算机上机(三)
输入字符串的中缀表达式

包含‘+’、‘-’、‘*’、‘/’、‘(’、‘)’,输出运算结果。

输入格式:

字符串的中缀表达式

输出格式:

计算结果

输入样例:

3+5-3)*2

输出样例:

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

    }
};


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