nobody_here @ 2024-08-01 21:37:05
#include<bits/stdc++.h>
using namespace std;
int main(){
stack<char> a;
char w;
int n=0,m=0,y=0;
cin>>w;
do{
if(w=='/' || w=='*' || w=='-' || w=='+'){
n=a.top()-'0';
a.pop();
m=a.top()-'0';
a.pop();
if(w=='/'){
y=n/m;
a.push(y+'0');
}else if(w=='*'){
y=n*m;
a.push(y+'0');
}else if(w=='-'){
y=n-m;
a.push(y+'0');
}else{
y=n+m;
a.push(y+'0');
}
}else if(w=='.'){
/*37*/
}else{
a.push(w);
}
cin>>w;
}while(w=='@');
cout<<a.top()-'0';
return 0;
}
实在写不出了,dalao们救救我
by zzhhyy1234 @ 2024-08-04 10:53:21
while(w=='@');
首先这个会使你的程序在输入字符不为@时跳出,所以这个循环就没了
by zzhhyy1234 @ 2024-08-04 10:54:32
改成下面这样才能循环
while(w!='@');
by zzhhyy1234 @ 2024-08-04 10:56:13
然后我们观察到这个
m=a.top()-'0';
a.pop();
n=a.top()-'0';
a.pop();
by zzhhyy1234 @ 2024-08-04 11:00:47
我们有两个数x,y 入栈变成
y
x
像上面写n=x,m=y,符合原本数据
而我们发现
你的程序翻转了计算
by zzhhyy1234 @ 2024-08-04 11:02:29
对于加法和乘法,它们符合交换率,你的程序没有问题,但对于减法和除法会出现问题
by zzhhyy1234 @ 2024-08-04 11:04:02
现在这么改,你的程序可以过样例一了
by zzhhyy1234 @ 2024-08-04 11:07:21
我们发现:样例一的数only一位,所以能过样例一
by zzhhyy1234 @ 2024-08-04 11:08:24
显然,你的程序没有考虑w>=10的情况
by zzhhyy1234 @ 2024-08-04 11:12:50
我们考虑
把
else if(w=='.'){
/*37*/
改为
else if(w=='.'){
a.push(x);
x=0;
flag=0;
}
把
stack<char> a;
改为
stack<int> a;
并且定义x=0,flag=0
by zzhhyy1234 @ 2024-08-04 11:14:22
在最后一个else内部加入
if(flag==0){
flag=1;
x=c-'0';
}
else{
x*=10;
x+=c-'0';
}