代码如下:
#include <bits/stdc++.h>
using namespace std;
int f[2000001], v[2000001], n;
char s[2000001];
const int mod = 10000;
inline int dfs(int l, int r) {
if (f[r] >= l)
return (dfs(l, f[r] - 1) + dfs(f[r] + 1, r)) % mod;
if (v[r] >= l)
return dfs(l, v[r] - 1) * dfs(v[r] + 1, r) % mod;
int number = 0;
for (int i = l; i <= r; i++)
number = number * 10 + s[i] - '0';
return number;
}
int main(){
scanf("%s", s + 1);
n = strlen(s + 1);
for (int i = 1; i <= n; i++) {
f[i] = f[i - 1];
v[i] = v[i - 1];
if (s[i] == '+')
f[i] = i;
if (s[i] == '*')
v[i] = i;
}
printf("%d\n", dfs(1, n));
}
input:
11219
output:
11219
result:
wrong answer 1st numbers differ - expected: '1219', found: '11219'