零分求调

P1449 后缀表达式

lyk1227 @ 2024-12-01 14:41:54

提交记录

#include<bits/stdc++.h>
using namespace std;
stack<int> a;
int ans,b1,b2;
string s;
int main(){
    cin>>s;
    for(int i=0;i<s.size();i++){
        if(s[i]=='@')break;
        else if(s[i]=='.'){
            a.push(ans);
            ans=0;
            continue;
        }
        else if('0'>=s[i]&&s[i]<='9')ans=(ans*10)+(s[i]-48);
        else if(s[i]=='+'){
            b1=a.top();
            a.pop();
            b2=a.top();
            a.pop();
            a.push(b1+b2);
        }
        else if(s[i]=='-'){
            b1=a.top();
            a.pop();
            b2=a.top();
            a.pop();
            a.push(b1-b2);
        }
        else if(s[i]=='*'){
            b1=a.top();
            a.pop();
            b2=a.top();
            a.pop();
            a.push(b1*b2);
        }
        else if(s[i]=='/'){
            b1=a.top();
            a.pop();
            b2=a.top();
            a.pop();
            a.push(b1/b2);
        }
        b1=0;
        b2=0;
    }
    ans=a.top();
    printf("%d",ans);
    return 0;
}

求dalao调试代码

样例都没过


by Qph123456 @ 2024-12-15 21:36:44


#include<bits/stdc++.h>
using namespace std;
stack<int> a;
int ans,b1,b2;
string s;
int main(){
    cin>>s;
    for(int i=0;i<s.size();i++){
        if(s[i]=='@')break;
        else if(s[i]=='.'){
            a.push(ans);
            ans=0;
            continue;
        }
        else if(s[i]>='0'&&s[i]<='9')ans=(ans*10)+(s[i]-48);//你之前写的是'0'>=s[i](布柿)
        else if(s[i]=='+'){//栈是先进后出,按输入1,第一个减号之后会出现b1=2,b2=5,的情况(原代码:a.push(b1+b2);)
            b1=a.top();
            a.pop();
            b2=a.top();
            a.pop();
            a.push(b2+b1);
        }
        else if(s[i]=='-'){//栈是先进后出,按输入1,第一个减号之后会出现b1=2,b2=5,的情况(原代码:a.push(b1-b2);)
            b1=a.top();
            a.pop();
            b2=a.top();
            a.pop();
            a.push(b2-b1);
        }
        else if(s[i]=='*'){//栈是先进后出,按输入1,第一个减号之后会出现b1=2,b2=5,的情况(原代码:a.push(b1*b2);)
            b1=a.top();
            a.pop();
            b2=a.top();
            a.pop();
            a.push(b2*b1);
        }
        else if(s[i]=='/'){//栈是先进后出,按输入1,第一个减号之后会出现b1=2,b2=5,的情况(原代码:a.push(b1/b2);)
            b1=a.top();
            a.pop();
            b2=a.top();
            a.pop();
            a.push(b2/b1);
        }
        b1=0;
        b2=0;
    }
    ans=a.top();
    printf("%d",ans);
    return 0;
}

by Qph123456 @ 2024-12-15 21:38:45

错误点1:15行0'>=s[i]

错误原因:打反了(布柿?)

错误点2:16、23、30、37行a.push(b1+b2);

错误原因:易错点,栈是先进后出,按输入1,第一个减号之后会出现b1=2,b2=5,的情况


|