C++ 判断自幂数算法详解及代码实现
C++ 判断自幂数算法详解及代码实现
自幂数是指一个 N 位数,满足各位数字 N 次方之和是本身。例如,153 是 3 位数,其每位数的 3 次方之和,13 + 53 + 33 = 153,因此 153 是自幂数;1634 是 4 位数,其每位数的 4 次方之和,14 + 64 + 34 + 44 = 1634,因此 1634 是自幂数。
本文将详细讲解如何使用 C++ 编程语言判断一个正整数是否为自幂数,并提供完整的代码示例。文章涵盖了问题分析、思路解析和代码实现等方面,帮助读者更好地理解自幂数的概念及算法,并能够独立完成类似的编程任务。
问题描述
输入若干个正整数,请判断它们是否是自幂数。
输入描述
输入第一行是一个正整数 M,表示有 M 个待判断的正整数。约定 1≤M≤100 。
从第 2 行开始的 M 行,每行一个待判断的正整数。约定这些正整数均小于 108 。
输出描述
输出 M 行,如果对应的待判断正整数为自幕数,则输出英文大写字母 ' T ',否则输出英文大写字母 ' F '。
提示
提示:不需要等到所有输入结束在依次输出,可以输入一个数就判断一个数 并输出,再输入下一个数。
样例:
输入
3 152 111 153
输出
F F T
输入
5 8208 548834 88593477 12345 5432
输出
T T T F F
问题分析
题目要求判断输入的正整数是否是自幂数。对于每个正整数,需要计算其每位数字的 N 次方之和,并与该正整数进行比较。
思路
1. 读取输入的 M,表示有 M 个正整数需要判断。
2. 循环 M 次,对于每个正整数执行以下步骤:
a. 读取一个待判断的正整数 num。
b. 将 num 转换为字符串,以便可以逐位遍历每个数字。
c. 初始化 sum 为 0,用于保存每位数字的 N 次方之和。
d. 遍历 num 的每个字符,将每位数字的 N 次方加到 sum 中。
e. 如果 sum 等于 num,则输出 ' T ',否则输出 ' F '。
3. 结束。
代码实现
#include <iostream>
#include <cmath>
using namespace std;
bool isSelfNumber(int num, int N) {
string numStr = to_string(num);
int sum = 0;
for (char c : numStr) {
int digit = c - '0';
sum += pow(digit, N);
}
return sum == num;
}
int main() {
int M;
cin >> M;
for (int i = 0; i < M; i++) {
int num;
cin >> num;
if (isSelfNumber(num, 3)) {
cout << 'T' << endl;
} else {
cout << 'F' << endl;
}
}
return 0;
}
以上代码实现了判断自幂数的功能,并给出了两个输入样例的测试结果。希望本文能够帮助读者更好地理解自幂数的概念及算法,并能够独立完成类似的编程任务。
原文地址: https://www.cveoy.top/t/topic/qoMj 著作权归作者所有。请勿转载和采集!