社区讨论
20分,求教
P1981[NOIP 2013 普及组] 表达式求值参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m5ze1jp9
- 此快照首次捕获于
- 2025/01/16 21:50 去年
- 此快照最后确认于
- 2025/11/04 11:29 4 个月前
样例都过了,但只过了#1和#4
CPP#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 1e8;
string s;
int a[N], atop = 0, btop = 0;
char b[N];
void f(int *a, char b, int c) {
if (b == '+')
a[c - 1] += a[c];
else
a[c - 1] *= a[c];
return ;
}
int jud(char a) {
if (a == '+')
return 0;
else
return 1;
}
int main() {
cin >> s;
int len = s.length(), i = 0;
while (i < len) {
char c = s[i];
if (c >= '0' && c <= '9') {
int num = 0;
for (; c >= '0' && c <= '9' && i < len; ) {
i++;
num = num * 10 + (ll)(c - '0');
c = s[i];
}
a[++atop] = num;
continue;
} else {
while (btop && jud(c) <= jud(b[btop]))
f(a, b[btop--], atop--);
b[++btop] = c;
}
i++;
}
while (btop >= 0)
f(a, b[btop--], atop--);
if (a[atop + 1] < 10000)
cout << a[atop + 1];
else
cout << a[atop + 1] % 10000;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...