------求助------

P1449 后缀表达式

我不知道,反正我开了`long long`
by 赫敏·东方延绪 @ 2019-07-08 23:45:34


为什么要用快读呢?
by XLost @ 2019-07-09 06:45:57


@[Shidai_linzihan](/space/show?uid=162166) 您可能遇到了未定义行为: ``` a[-- top] = a[top] + a[top + 1] ``` 这句话中关于 "top" 的操作是未定义的 换句话说,这行代码的执行结果取决于编译器,您的电脑上执行的结果可能是 : ``` a[top - 1] = a[top - 1] + a[top]; ``` 这样你的输出会是正确的。 但是在洛谷上这句话执行的结果是 ``` a[top - 1] = a[top] + a[top + 1]; ``` 于是在遇到除 0 的时候你就 RE 了,普通的情况你也 WA 了。 差不多就是这样。 把您的代码改为 ```cpp #include<stdio.h> #include<iostream> using namespace std; int main(){ int s=0,w=1,top=0,a[1010]; int ch=getchar(); for(;;){ while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=getchar();//入栈 while(ch<'0'||ch>'9'){ switch(ch){ case '.':a[++top]=s;break; case '+':top --,a[top]=a[top]+a[top+1];break; case '-':top --,a[top]=a[top]-a[top+1];break; case '*':top --,a[top]=a[top]*a[top+1];break; case '/':top --,a[top]=a[top]/a[top+1];break; case '@':cout<<a[top];return 0;//算完两个数再压入栈中,准备之前的操作符运算 }s=0;ch=getchar(); } } } ``` 就能 AC 了
by Wen_kr @ 2019-07-09 07:13:45


@[Wen_kr](/space/show?uid=25308) 已经过了,感谢!
by Shidai_linzihan @ 2019-07-09 09:33:47


@[Shidai_linzihan](/space/show?uid=162166) 楼上不对的 $luogu$不会理解错这句话 $AC.Code$ ```cpp //luogu1499 //后缀表达式 #include <bits/stdc++.h> int p, s[1001], top; char cc; int main(){ while(true){ cc = getchar(); switch(cc){ case '.': s[++top] = p , p = 0; break; case '+': s[--top] += s[top+1]; break; case '-': s[--top] -= s[top+1]; break; case '*': s[--top] *= s[top+1]; break; case '/': s[--top] /= s[top+1]; break; case '@': printf("%d", s[top]), exit(0); break; default: p = p*10 + cc - '0'; } } } ```
by HZAUqzx @ 2019-07-30 19:23:59


|