题解
【基础】表达式的值(III)
1 条题解
-
0
解题思路
题目要求计算形如 (a+b)*c 的表达式。
思路:解析字符串。
- 用 find 找到左括号 (、加号 +、右括号 ) 和乘号 * 的位置
- 根据位置用 substr 把 a、b、c 的字符串切出来
- 用 stoi 把字符串转成整数
- 计算 (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