top1编程
← 返回题目
题解

输出竖式

1 条题解

  • 0
    @ 2026-8-4 1:58:27

    解题思路

    这道题要我们按竖式的格式把 18 + 870 的竖式打印出来,答案要让程序先算出来再输出。

    先自己口算:18 + 870 = 888。所以最终输出是这样:

    18
     + 870
    ------
       888
    

    我们可以把问题拆成四行来做:

    1. 第一行:直接输出第一个加数 18。
    2. 第二行:先输出一个空格,再输出加号、空格和第二个加数 870,也就是 " + 870"。
    3. 第三行:输出 6 个减号组成的横线 "------",表示下面的横线。
    4. 第四行:输出结果。结果要和上面的竖式对齐,也就是 888 的个位要跟 870 的个位对齐。因为 888 是 3 位数,横线有 6 格,所以前面先补 3 个空格,再输出 888。

    写程序的时候,把两个加数存进变量 a 和 b,再用 sum = a + b 把答案算出来。这样竖式里显示的是"算出来"的结果,而不是把 888 直接写死,更符合题目"???使用计算结果替换"的意思。

    为什么第四行要空 3 格?因为 870 占 3 个字符,前面还有空格和加号,整行算下来是 6 个字符宽;888 也是 3 位,为了个位对齐,前面就要空出 6 - 3 = 3 个空格。对齐是竖式的灵魂,错一个空格看起来就不像竖式了。

    要点:千万不要忘记换行!每一行输出完都要用 endl 换行,否则四行会挤成一长条,竖式就全乱套了。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int a = 18;        // 竖式上面的加数
        int b = 870;       // 竖式下面的加数
        int sum = a + b;   // 先用加法算出答案:18 + 870 = 888
    
        cout << a << endl;          // 第一行:输出 18
        cout << " + " << b << endl; // 第二行:空格 加号 空格 870
        cout << "------" << endl;   // 第三行:6 个减号组成的横线
    
        // 第四行:答案 888 是 3 位数,前面补 3 个空格,
        // 让它的个位和上面 870 的个位对齐
        cout << "   " << sum << endl;
    
        return 0;
    }
    

    复杂度分析

    没有输入数据,只有固定的四行输出。程序只做一次加法和几次输出,运算次数固定,所以时间复杂度和空间复杂度都是 O(1)。

    • 1