【深基6.例4】口算练习题 · 教师题解
【深基6.例4】口算练习题
解题思路
每题先读一个字符串。如果是 a、b、c 就更新运算类型,再读两数;否则该字符串是第一个运算数,沿用上一题类型。计算后拼接完整表达式,输出字符串长度。
正确性说明
输入两种形式被首字符是否为运算类型准确区分;类型状态保留使省略类型的题沿用前题。拼接字符串包含数字、运算符、等号和可能的负号,长度即要求值。
易错点
减法可能为负,负号也计入长度;第一题保证给出类型。
复杂度
每题表达式长为 L,总时间 O(iL),额外空间 O(L)。
参考代码(C++11)
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
char op = 'a';
while (n--) {
string t;
cin >> t;
long long a, b;
if (t == "a" || t == "b" || t == "c") {
op = t[0];
cin >> a >> b;
} else {
a = stoll(t);
cin >> b;
}
char sign = op == 'a' ? '+' : op == 'b' ? '-' : '*';
long long r = op == 'a' ? a + b : op == 'b' ? a - b : a * b;
string expr = to_string(a) + sign + to_string(b) + "=" + to_string(r);
cout << expr << "\n" << expr.size() << "\n";
}
return 0;
}