1 条题解
-
0
思路与算法
维护当前乘法项和已完成加法项,遇加号结算,所有中间结果取模10000;与库内仅两位整数单运算符协议不同。
按上述模型建立状态或枚举对象,依代码中的顺序处理输入并输出完整答案。
正确性说明
表达式可按加号唯一分割为若干乘积,程序先积累乘积项,遇加号才计入总和,恰好实现乘法优先。同余对加法乘法封闭,所以每步模10000保持最终末四位。
复杂度
O(L)时间和O(L)输入字符串空间,L为表达式字节长度;运算状态常数。
易错点
末尾添加加号使最后一项结算;不要补前导零,也不要先用32位完成两个最大整数的乘法。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; int main() { string s; cin >> s; s += '+'; long long v = 0, term = 1, ans = 0; for (char c : s) { if (isdigit(c)) v = (v * 10 + c - '0') % 10000; else { term = term * v % 10000; v = 0; if (c == '+') { ans = (ans + term) % 10000; term = 1; } } } cout << ans << "\n"; }
- 1