zoukankan      html  css  js  c++  java
  • 前缀表达式计算(栈的使用)

    #include <bits/stdc++.h>
    using namespace std;
    string s;
    stack<double>ac;
    bool op(char c){
        if(c=='+'||c=='-'||c=='*'||c=='/'){
            return 1;
        }
        else return 0;
    }
    int main(){
            getline(cin,s);
            while(!ac.empty()){
                ac.pop();
            }
            int len=s.length();
            int n=1;
            double num=0;
            int flag=0;
            for(int i=len-1;i>=0;i--){
                if(s[i]>='0'&&s[i]<='9'){
                    num+=(s[i]-'0')*n;
                    n*=10;
                }
                else if(s[i]=='.'){
                    num=num/(n*1.0);
                    n=1;
                }
                else if((s[i]=='+'||s[i]=='-')&&num!=0){
                    if(s[i]=='+'){
                        ac.push(num);
                        i--;
                        continue;
                    }
                    else{
                        num=-num;
                        ac.push(num);
                        i--;
                        continue;
                    }
                }
                else if(s[i]==' '){
                    ac.push(num);
                    num=0;
                    n=1;
                    continue;
                }
                else if(op(s[i])){
                    double a=ac.top();
                    ac.pop();
                    double b=ac.top();
                    ac.pop();
                    double t=0;
                    if(s[i]=='+'){
                        t=a+b;
                    }
                    else if(s[i]=='-'){
                        t=a-b;
                    }
                    else if(s[i]=='*'){
                        t=a*b;
                    }
                    else if(s[i]=='/'){
                        if(b==0){
                            flag=1;
                            break;
                        }
                        t=a/b;
                    }
                    ac.push(t);
                    i--;
                }
            }
            if(flag==0){
                printf("%.1f ",ac.top());
            }
            else{
                printf("ERROR ");
            }
        return 0;
    }

  • 相关阅读:
    Appium常用操作之混合应用H5上下文切换
    Appium常用操作之X5内核应用(如微信小程序)上下文切换
    Appium常用操作之toast弹出框处理
    Appium常用操作之页面中的滑动点击
    Appiun常用操作之页面滑动操作
    Appium常用操作之九宫格滑动解锁
    Git、GitHub、GitLab三者之间的联系以及区别
    vm上如何安装centos7
    harles 抓web http、https请求,需要怎么做?给电脑以及浏览器安装证书并设置host、端口号
    Spring Boot Admin开源监控系统
  • 原文地址:https://www.cnblogs.com/lhlccc/p/12382836.html
Copyright © 2011-2022 走看看