wang0728 @ 2023-07-24 16:34:39
#include <bits/stdc++.h>
using namespace std;
char s[55];
stack<int>t;
int a,b;
int main(){
for(int i=0;s[i]!='@';i++){
cin>>s[i];
if(s[i]!='.'&&s[i]>='0'&&s[i]<='9'){
t.push(s[i]);
}
else if(s[i]=='+'){
t.pop();
a=t.top();t.pop();
b=t.top();t.pop();
t.push(b+a);
}
else if(s[i]=='-'){
t.pop();
a=t.top();t.pop();
b=t.top();t.pop();
t.push(b-a);
}
else if(s[i]=='*'){
t.pop();
a=t.top();t.pop();
b=t.top();t.pop();
t.push(b*a);
}
else if(s[i]=='/'){
t.pop();
a=t.top();t.pop();
b=t.top();t.pop();
t.push(b/a);
}
// cout<<s[i]<<" ";
}
// while(!t.empty()){
// cout<<t.top();
// t.pop();
// }
cout<<t.top();
return 0;
}
by ran_qwq @ 2023-07-24 16:54:50
@wang0728 问题有两个
如果输入的数是一个两位数呢?应该维护一个变量 x,每次遇到一个数字,把该数字加进 x 的末尾(x=x*10+s[i]-'0')。注意 s[i] 读入进来的是数字的 ASCII 码,要减去 '0'。遇到 . 才把 x 压入栈中并 x=0。
遇到加减乘除时 pop 了三次,应去掉第一次,会导致 RE。
by wang0728 @ 2023-07-25 09:11:50
@ran_qwq 谢谢,我改一下