20260927 075800 计算

20260927_075800_计算.md

B3685 计算

题目描述

给定一个 $3$ 位整数 $n$,计算:
1. $n$ 的各位数字之和;
2. $n$ 的各位数字之和的平方;
3. $n$ 的各位数字之和的立方;

例如,当这个三位数是 $123$ 时:

  1. 各位数字之和为:$1+2+3=6$;
  2. 各位数字之和的平方为:$(1+2+3)^2=(1+2+3)\times (1+2+3)=36$;
  3. 各位数字之和的立方为:$(1+2+3)^3=(1+2+3)\times (1+2+3)\times (1+2+3)=216$。

输入格式

输入只有一行一个三位整数 $n$。

输出格式

输出共三行,第一行为各位数字之和,第二行为各位数字之和的平方,第三行为各位数字之和的立方。

输入输出样例 #1

输入 #1

817

输出 #1

16
256
4096

说明/提示

样例 1 解释

各位数字之和为:$8+1+7=16$;
各位数字之和的平方为:$16^2=16\times 16 = 256$;
各位数字之和的立方为:$16^3 =16\times 16\times 16 = 4096$。

数据规模与约定

对于全部的测试点,保证 $100 \leq n \leq 999$。


下面按信奥赛标准做题流程,把 B3685 [语言月赛 202212] 计算 走一遍。


1. 审题:三遍读题

任务:
给定一个三位整数 (n),求:

  1. 各位数字之和;
  2. 各位数字之和的平方;
  3. 各位数字之和的立方。

输入:
一行一个三位整数 (n)。

输出:
共三行:

  • 第一行:各位数字之和
  • 第二行:各位数字之和的平方
  • 第三行:各位数字之和的立方

数据范围:
$(100 \le n \le 999)$

样例:
输入 817

各位数字之和:
$
[
8+1+7=16
]$

平方:
$
[
16^2=256
]$

立方:
$
[
16^3=4096
]$

所以输出:

16
256
4096

2. 复杂度倒推

这题只有一个三位数,数据规模极小。

  • 时间复杂度:(O(1))
  • 空间复杂度:(O(1))

不需要考虑优化,直接模拟即可。


3. 算法思路

三位整数 (n) 的各位数字可以这样取:

  • 百位:n / 100
  • 十位:n / 10 % 10
  • 个位:n % 10

也可以更通用地用循环取每一位:

int sum = 0;
while (n > 0) {
    sum += n % 10;
    n /= 10;
}

因为题目固定是三位数,两种写法都可以。


4. 伪代码

读入 n
sum = 0
while n > 0:
    sum += n % 10
    n /= 10
输出 sum
输出 sum * sum
输出 sum * sum * sum

5. 参考代码

写法一:循环取位,通用

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;

    int sum = 0;
    while (n > 0) {
        sum += n % 10;
        n /= 10;
    }

    cout << sum << '\n';
    cout << sum * sum << '\n';
    cout << sum * sum * sum << '\n';

    return 0;
}

写法二:直接取三位数字

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;

    int a = n / 100;       // 百位
    int b = n / 10 % 10;   // 十位
    int c = n % 10;        // 个位

    int sum = a + b + c;

    cout << sum << '\n';
    cout << sum * sum << '\n';
    cout << sum * sum * sum << '\n';

    return 0;
}

6. 测试设计

提交前至少测试以下数据:

样例

输入:

817

输出:

16
256
4096

最小值

输入:

100

各位数字之和:

[
1+0+0=1
]

输出:

1
1
1

最大值

输入:

999

各位数字之和:

[
9+9+9=27
]

输出:

27
729
19683

普通数据

输入:

123

输出:

6
36
216

7. 提交前检查

  • 输入是否只读一个整数?
  • 是否输出三行?
  • 是否每个结果后都换行?
  • 平方、立方是否用 sum * sum、sum * sum * sum?
  • 数据范围很小,int 足够,不会溢出。

8. 教练总结

这题是典型的 入门模拟题,核心只有两步:

  1. 取出三位数的每一位;
  2. 求和后分别输出一次方、平方、立方。

比赛时直接写循环取位即可,代码短且不容易错。

一句话:

取位 → 求和 → 输出 sum、sum²、sum³。