top1编程
← 返回题目
题解

【基础】表达式的值(III)

1 条题解

  • 0
    @ 2026-7-31 14:58:48

    解题思路

    题目要求计算形如 (a+b)*c 的表达式。

    思路:解析字符串。

    1. 用 find 找到左括号 (、加号 +、右括号 ) 和乘号 * 的位置
    2. 根据位置用 substr 把 a、b、c 的字符串切出来
    3. 用 stoi 把字符串转成整数
    4. 计算 (a+b)*c

    怎么切出 a、b、c?

    • a:左括号后面到加号前面
    • b:加号后面到右括号前面
    • c:乘号后面到最后

    举例:(12+13)*20

    • a=12,b=13,c=20
    • (12+13)×20 = 500

    参考代码

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
        string e;
        cin >> e;
    
        int p1 = e.find('(');
        int p2 = e.find('+');
        int p3 = e.find(')');
        int p4 = e.find('*');
    
        string a = e.substr(p1 + 1, p2 - p1 - 1);
        string b = e.substr(p2 + 1, p3 - p2 - 1);
        string c = e.substr(p4 + 1);
        int x = stoi(a), y = stoi(b), z = stoi(c);
    
        cout << (x + y) * z << endl;
        return 0;
    }
    

    复杂度分析

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