top1编程
← 返回题目
题解

【基础】表达式的值II

1 条题解

  • 0
    @ 2026-7-31 4:53:02

    解题思路

    题目要求计算一个只含 + 和 - 的表达式。

    表达式中没有括号,所以只要从左到右计算就行。

    方法:逐字符扫描表达式

    1. 遇到数字就拼接到当前数字后面(可能有多位数)
    2. 遇到 + 或 -,就把之前拼好的数字按前面的符号加入结果,然后更新符号
    3. 循环结束后,再把最后一个数字加上

    参考代码

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        string s;
        cin >> s;
    
        int ans = 0;
        int num = 0;
        int sign = 1;
    
        for (int i = 0; i < s.size(); i++) {
            if (s[i] >= '0' && s[i] <= '9') {
                // 数字,拼接到当前数字后面
                num = num * 10 + (s[i] - '0');
            } else {
                // 遇到运算符,先把前面的数字加到结果
                ans = ans + sign * num;
                num = 0;
                if (s[i] == '+') sign = 1;
                else sign = -1;
            }
        }
        // 加上最后一个数字
        ans = ans + sign * num;
    
        cout << ans << endl;
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N),N 为表达式长度
    • 空间复杂度:O(1)
    • 1