#20763: 請問我這樣哪裡錯了


Easonsfriend (去寫./Problems?ownerid=89827)

學校 : 不指定學校
編號 : 89827
來源 : [106.105.188.90]
最後登入時間 :
2024-04-23 23:15:35
d016. 後序運算法 | From: [106.105.188.90] | 發表日期 : 2020-03-01 21:58

#include <iostream>

#include <cmath>

using namespace std;

 

int number[1000];

char operators[1000];

 

int nums=0;

int opers=0;

 

void load(string reg);

int compute();

 

int main(){

    string reg;

    while(getline(cin,reg)){

        if(reg=="")return 0;

        nums=0;

        opers=0;

        load(reg);

        cout<<compute()<<'\n';

    }

}

void load(string reg){

    reg.append(1, ':');

    int k=0;

    for(char a:reg){

        if(isdigit(a)){

            k*=10;

            k+=a-'0';

        }

        else{

            if(a==' '&&k!=0){

                number[nums++]=k;

                k=0;

            }

            if(a != ':'&&a!=' ')

                operators[opers++]=a;

        }

    }

}

int compute(){

    bool isplus=false;

    for(int i=0;i<opers;i++){

        if(operators[i]=='+')isplus=true;

        else if(operators[i]=='-')isplus=false;

        if(operators[i]=='*'){

            number[i+1]*=number[i];

            number[i]=0;

            if(isplus)operators[i]='+';

            else operators[i]='-';

        }

        if(operators[i]=='/'){

            number[i+1]=number[i]/number[i+1];

            number[i]=0;

            if(isplus)operators[i]='+';

            else operators[i]='-';

        }

    }

    int ans=number[0];

    for(int i=0;i<opers;i++){

        if(operators[i]=='+')

            ans+=number[i+1];

        else ans-=number[i+1];

    }

    return ans;

}

 

 
ZeroJudge Forum