算法训练 表达式计算

问题描述

  输入一个只包含加减乖除和括号的合法表达式,求表达式的值。其中除表示整除。

输入格式

  输入一行,包含一个表达式。

输出格式

  输出这个表达式的值。

样例输入

1-2+3*(4-5)

样例输出

-4

数据规模和约定

  表达式长度不超过100,表达式运算合法且运算过程都在int内进行。

#include<bits/stdc++.h>
using namespace std;
stack<int>m;
stack<char>s;
void deal(char c)
{
    int num1,num2;
    if(c=='+'||c=='-'||c==')')
    {
        while(s.top()!='(')
        {
            num1=m.top();
            m.pop();
            num2=m.top();
            m.pop();
            switch(s.top())
            {
            case '+':
                num2+=num1;
                break;
            case '-':
                num2-=num1;
                break;
            case '*':
                num2*=num1;
                break;
            case '/':
                num2/=num1;
                break;
            }
            m.push(num2);
            s.pop();
        }
        s.push(c);
    }
    else if(c=='*'||c=='/')
    {
        while(s.top()=='*'||s.top()=='/')
        {
            num1=m.top();
            m.pop();
            num2=m.top();
            m.pop();
            switch(s.top())
            {
            case '*':
                num2*=num1;
                break;
            case '/':
                num2/=num1;
                break;
            }
            m.push(num2);
            s.pop();

        }s.push(c);
    }
    else if(c=='(')
    {
        s.push(c);
    }
}
int main()
{
    string str;
    cin>>str;
    char number[101];
    int len=0;
    str+=")";
    s.push('(');
    for(int i=0; str[i]; i++)
    {
        if(str[i]>='0'&&str[i]<='9')
        {
            number[len++]=str[i];
            continue;
        }
        number[len]='\0';
        if(number[0]!='\0')
        {
            m.push(atoi(number));
            number[0]='\0';
            len=0;
        }
        deal(str[i]);
        if(str[i]==')')
        {
            s.pop();
            s.pop();
        }
    }
    cout<<m.top()<<endl;
}

猜你喜欢

转载自blog.csdn.net/qq_42623428/article/details/87942384