sandm__ @ 2020-08-14 14:51:25
求指教,不知有什么错
#include<bits/stdc++.h>
using namespace std;
int z[1010];
int main()
{
char s[1010];
cin>>s;
int i,top=0;
int t=strlen(s);
for(i=0;i<=t;i++)
{
if(s[i]=='@')break;
if(s[i]=='.')continue;
if(s[i]>='0'&&s[i]<='9')
{
top++;
z[top]=s[i]-48;
continue;
}
switch(s[i])
{
case '-':z[--top]=z[top]-z[top+1];break;
case '*':z[--top]=z[top]*z[top+1];break;
case '/':z[--top]=z[top]/z[top+1];break;
case '+':z[--top]=z[top]+z[top+1];break;
}
}
cout<<z[top];
return 0;
}
by konjacq @ 2020-08-14 14:53:14
@lixiang314 没保证输入都是一位数吧
by sandm__ @ 2020-08-14 15:29:31
@konjacq 对啊 谢谢大佬orzorz
by sandm__ @ 2020-08-14 15:40:06
@konjacq 不过改了之后还是wa
by konjacq @ 2020-08-14 15:41:10
@lixiang314 代码发一下,我没交这道题看不到
by sandm__ @ 2020-08-14 15:56:21
@konjacq 您看
#include<bits/stdc++.h>
using namespace std;
int z[1010];
int main()
{
char s[1010];
cin>>s;
int i,top=0,w=0;
int t=strlen(s);
for(i=0;i<=t;i++)
{
if(s[i]=='@')break;
if(s[i]=='.')
{
w=0;
continue;
}
if(s[i]>='0'&&s[i]<='9')
{
w++;
if(w==1)
{
top++;
z[top]=s[i]-48;
}
else
{
z[top]*=10;
z[top]+=s[i]-48;
}
continue;
}
switch(s[i])
{
case '-':z[--top]=z[top]-z[top+1];break;
case '*':z[--top]=z[top]*z[top+1];break;
case '/':z[--top]=z[top]/z[top+1];break;
case '+':z[--top]=z[top]+z[top+1];break;
}
}
cout<<z[top];
return 0;
}
by konjacq @ 2020-08-14 15:59:12
z[--top]=z[top]-z[top+1];
建议把这里弄一下吧,不清楚是先--
还是先+1
,可能UB了(当然很有可能其实不是这里的问题
by konjacq @ 2020-08-14 16:00:44
另外感觉你这个top的维护也怪怪的,感觉维护一个临时变量,在读到.
的时候再压进栈里会比较合理.
by sandm__ @ 2020-08-15 10:38:42
@konjacq 好的谢谢您