1 条题解

  • 0
    @ 2026-10-26 22:20:37

    思路与算法

    维护当前乘法项和已完成加法项,遇加号结算,所有中间结果取模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

    信息

    ID
    1899
    时间
    1000ms
    内存
    128MiB
    难度
    进阶
    标签
    递交数
    0
    已通过
    0
    上传者