AcWing 454. 表达式求值
原题链接
中等
作者:
增元算两次
,
2020-02-23 18:11:44
,
所有人可见
,
阅读 1377
算法
- 关于输入我们可以用 scanf(“%d%[+*]”)==2 拆成整数和符号,把读入的字符分别存进 a[n] 和 op[n]
- 先算所有连乘,再求和
- 对于每个数,处理它后面和它乘起来的数,然后累加进答案
C++ 代码
#include <cstdio>
const int N = 1e5 + 10;
int a[N];
char op[N];
int main() {
int n = 0;
while (scanf("%d%[+*]", &a[n], &op[n]) == 2) n++;
n++;
int res = 0;
for (int i = 0; i <= n; i++) {
int t = a[i] % 10000;
for (; i < n && op[i] == '*'; i++) {
t *= a[i + 1] % 10000;
t %= 10000;
}
res += t;
res %= 10000;
}
printf("%d\n", res);
return 0;
}
想问下大佬 为什么在计算的时候每一步都对10000求余呢? 每次只用后4位计算,为什么结果是正确的呢?