题解:
之前用栈做,但思路十分复杂,判断了很多种情况,没有找到一种简单
的方法。然后看到网上有人说可以不用栈做,对于这道题的话就简单易懂
了许多,思路是记忆上一次的符号和这一次的符号来判断运算和优先级,
连续的乘法另外保存最后再加到sum中去,不能读到符号时结束。
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<vector>
#include<queue>
#include<cctype>
#include<cmath>
#include<map>
#include<climits>
#include<stack>
#define MAXA 1000005
#define MOD 10000
using namespace std;
typedef long long LL;
long long sum,n,lc;
char old = 0,next;
bool last = true;
int main() {
while(last) {
scanf("%lld",&n);
last = scanf("%c",&next) == 1 ? true : false;
if(old == 0)
lc = n;
if(old == '+') {
sum = (sum + lc) % MOD;
lc = n;
}
if(old == '*')
lc = (n * lc) % MOD;
if(!last)
sum = (sum + lc) % MOD;
old = next;
}
printf("%lld",sum);
}