zoukankan      html  css  js  c++  java
  • 洛谷p1981 表达式求值

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    char s[100007];
    typedef long long ll;
    ll numSt[100007],opSt[100007],ans[63];
    int main(){
        while(~scanf("%s",s)){
            int numTail=0,opTail=0,len=strlen(s),i,cnt=0;
            for(i=0;i<len;++i){
                if(s[i]=='+'||s[i]=='*'){
                    if(s[i]=='+')     opSt[opTail++]=0;
                    else             opSt[opTail++]=1;
                }
                else{
                    ll base=0;
                    while(i<len&&s[i]!='*'&&s[i]!='+'){
                        base=base*10+(s[i]-'0');
                        i++;
                    }
                    i--;
                    numSt[numTail++]=base;
                    if(i==len-1||s[i+1]=='+'){
                        while(numTail&&opTail){
                            ll a=numSt[--numTail],b=numSt[--numTail];
                            ll op=opSt[--opTail];
                            if(op==1){
                                a*=b;
                            }
                            else{
                                a+=b;
                            }
                            numSt[numTail++]=a;
                        }
                    }
                }
            }
            while(cnt<4){
                ans[++cnt]=numSt[0]%10;
                numSt[0]/=10;
            }
            int base=0;
            for(i=cnt;i>=1;--i) base=base*10+ans[i];
            printf("%d
    ",base);
        }
        return 0;
    }
  • 相关阅读:
    C++ 中的深入浅拷贝和深拷贝
    C++ 引用小问题
    6-10
    6-8
    6-7
    6-4
    6-3
    6-1
    5-31
    COMException 依赖服务或组无法启动(0x8007042C)处理办法
  • 原文地址:https://www.cnblogs.com/linkzijun/p/6574709.html
Copyright © 2011-2022 走看看