B3685 计算¶
题目描述¶
给定一个 $3$ 位整数 $n$,计算:
1. $n$ 的各位数字之和;
2. $n$ 的各位数字之和的平方;
3. $n$ 的各位数字之和的立方;
例如,当这个三位数是 $123$ 时:
- 各位数字之和为:$1+2+3=6$;
- 各位数字之和的平方为:$(1+2+3)^2=(1+2+3)\times (1+2+3)=36$;
- 各位数字之和的立方为:$(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),求:
- 各位数字之和;
- 各位数字之和的平方;
- 各位数字之和的立方。
输入:
一行一个三位整数 (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. 教练总结¶
这题是典型的 入门模拟题,核心只有两步:
- 取出三位数的每一位;
- 求和后分别输出一次方、平方、立方。
比赛时直接写循环取位即可,代码短且不容易错。
一句话:
取位 → 求和 → 输出 sum、sum²、sum³。