[GESP202306 二级] 自幂数判断
GESP二级真题,多重循环应用,难度★✮☆☆☆。
luogu-B3841 [GESP202306 二级] 自幂数判断
题目要求
题目描述
自幂数是指,一个 位数,满足各位数字 次方之和是本身。例如, 是 位数,其每位数的 次方之和,,因此 是自幂数; 是 位数,其每位数的 次方之和,,因此 是自幂数。现在,输入若干个正整数,请判断它们是否是自幂数。
输入格式
输入第一行是一个正整数 ,表示有 个待判断的正整数。约定 。
从第 行开始的 行,每行一个待判断的正整数。约定这些正整数均小于 。
输出格式
输出 行,如果对应的待判断正整数为自幂数,则输出英文大写字母 ,否则输出英文大写字母 。
提示
不需要等到所有输入结束在依次输出,可以输入一个数就判断一个数并输出,再输入下一个数。
样例输入 #1
3
152
111
153
样例输出 #1
F
F
T
样例输入 #2
5
8208
548834
88593477
12345
5432
样例输出 #2
T
T
T
F
F
题目分析
解题思路
- 首先读取输入的整数个数 。
- 使用一个循环来遍历每个输入的整数。
- 对于每个整数,首先计算其位数 。
- 然后计算每个位数的 次方和 。
- 如果 等于当前整数,输出 “T”,否则输出 “F”。
{% include custom/custom-post-content-inner.html %}
示例代码
#include <cmath>
#include <iostream>
using namespace std;
int main() {
int n; // 输入的整数个数
cin >> n; // 读取输入的整数个数
for (int i = 0; i < n; i++) { // 遍历每个输入的整数
int m; // 当前输入的整数
cin >> m; // 读取当前输入的整数
int copy_m = m; // 复制当前输入的整数
int pows = 0; // 计算当前输入的整数的位数
while (copy_m != 0) { // 计算位数
copy_m /= 10;
pows++;
}
int sum = 0; // 计算每个位数的pows次方和
copy_m = m; // 复制当前输入的整数
while (copy_m != 0) { // 计算每个位数的pows次方和
sum += pow(copy_m % 10, pows); // 计算当前位数的pows次方并累加
copy_m /= 10; // 移除当前位数
}
if (sum == m) { // 判断是否为阿姆斯特朗数
cout << "T" << endl; // 是阿姆斯特朗数输出T
} else {
cout << "F" << endl; // 不是阿姆斯特朗数输出F
}
}
return 0;
}
{% include custom/custom-post-content-footer.md %}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
“luogu-”系列题目可在 洛谷题库 在线评测。
“bcqm-”系列题目可在 编程启蒙题库 在线评测。
GESP/CSP 认证学习微信公众号

Last updated on