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,的情况