zoukankan      html  css  js  c++  java
  • 对于运算表达式的运算优先级的解决方法(不带括号)

    #include<iostream>
    #include<cstring>
    #include<iomanip>
    #include<string>
    #include<stack>
    using namespace std;
    char a[6];
    stack<int>Num;
    stack<char>Operator;
    int main()
    {
        int n;
        cin>>n;
        int t=n;
        while(t--)
        {
            while(!Num.empty())Num.pop();
            while(!Operator.empty())Operator.pop();
            int t1=1;
            for(int i=1; i<=n; i++)
            {
                cin>>a[i];
                if(i==1)
                {
                    Num.push(a[i]-'0');
                }
                else
                {
                    if(t1%2==0)
                    {
                        Operator.push(a[i]);
                    }
                    else
                    {
                        Num.push(a[i]-'0');
                        if(Operator.top()=='*')
                        {
                            int t1=Num.top();
                            Num.pop();
                            int t2=Num.top();
                            Num.pop();
                            Num.push(t1*t2);
                            Operator.pop();
                        }
                        else if(Operator.top()=='/')
                        {
                            int t1=Num.top();
                            Num.pop();
                            int t2=Num.top();
                            Num.pop();
                            Num.push(t2/t1);
                            Operator.pop();
                        }
                        else if(Operator.top()=='%')
                        {
                            int t1=Num.top();
                            Num.pop();
                            int t2=Num.top();
                            Num.pop();
                            Num.push(t2%t1);
                            Operator.pop();
                        }
                    }
                }
                t1++;
            }
            int e=Num.top();
            int flag=1;
            int sum=0;
            while(!Operator.empty())
            {
                flag=0;
                char temp=Operator.top();
                Operator.pop();
                int t1=Num.top();
                Num.pop();
                int t2=Num.top();
                Num.pop();
                if(temp=='+')
                {
                    Num.push(t1+t2);
                }
                else if(temp=='-')
                {
                    Num.push(t2-t1);
                }
                sum=Num.top();
            }
            if(flag==0)
                cout<<sum<<endl;
            else
            {


                cout<<e<<endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    Reactive(1) 从响应式编程到"好莱坞"
    [动图演示]Redis 持久化 RDB/AOF 详解与实践
    补习系列(22)-全面解读 Spring Profile 的用法
    Android手机打造你的Python&Java开发工具!
    人工神经网络模型种类
    最小二乘拟合
    LDA主体模型
    Logistic Regression求解classification问题
    batch gradient descent(批量梯度下降) 和 stochastic gradient descent(随机梯度下降)
    SVM实验
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10263006.html
Copyright © 2011-2022 走看看