【深基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;
}
返回题目