加减乘除–计蒜客(蓝桥杯)

1001-高同学

发表文章数:265

首页 » LeetCode » 正文

题目在这里

注意两点:

1、为了方便计算,我把输入的表达式最前面加左括号,最后面加右括号

2、次方运算设置为优先级最低。(因为这样做会让下一个运算符的优先级一定≥次方运算符)这样就能正确输出结果。

代码如下:

#include <iostream>
#include <stdlib.h>
#include <stack>
#include <map>
#include <math.h>
#define ll long long
using namespace std;
stack <ll> num;
stack <char> ch;
int yunsuan()
{
    ll x2=num.top();            //注意x1与x2的顺序
    num.pop();
    ll x1=num.top();
    num.pop();
    char c=ch.top();
    ch.pop();
    switch(c)
    {
    case '+':
        return x1+x2;
        break;
    case '-':
        return x1-x2;
        break;
    case '*':
        return x1*x2;
        break;
    case '/':
        return x1/x2;
        break;
    case '^':
        return x1 = pow(x1,x2);
        break;
    }
    return 0;
}
bool cmp(char top,char a)
{

    if((top=='('))
        return false;
    if(a=='^')
        return false;
    if((top=='+'||top=='-') && (a=='*'||a=='/'))
        return false;
    if((a=='+'||a=='-'))
        return true;
    return true;
}
int main()
{

    string s;
    cin>>s;
    s = s+")";
    ch.push('(');
    int len = s.length();
    for(int i=0; i<len; i++)
    {
        if(s[i]>='0' && s[i]<='9')
        {
            ll a=s[i]-'0';
            for(i=i+1; i<len; i++){
                if(s[i]>='0' && s[i]<='9')
                {
                    a=a*10+(s[i]-'0');
                }
                else
                {
                    i--;
                    break;
                }
            }
            num.push(a);
        }
       else         //是符号的时候
        {
            while(cmp(ch.top(),s[i]))
            {
                ll a = yunsuan();
                num.push(a);
            }
            ch.push(s[i]);
        }
    }
    cout<<num.top();
    return 0;
}

如果有更好的解法或者想讨论的地方欢迎留言!

 

拜师教育学员文章:作者:1001-高同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《加减乘除–计蒜客(蓝桥杯)》 发布于2018-07-27

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录