C++ 判断自幂数 - 算法解析与实现
C++ 判断自幂数 - 算法解析与实现
【问题描述】 自幂数是指一个 N 位数,满足各位数字 N 次方之和是本身。例如,153 是 3 位数,其每位数的 3 次方之和,1'3' + 5'3' + 3'3' = 153,因此 153 是自幂数;1634 是 4 位数,其每位数的 4 次方之和,1'4' + 6'4' + 3'4' + 4'4' = 1634,因此 1634 是自幂数。 现在,输入若干个正整数,请判断它们是否是自幂数。
输入描述 输入第一行是一个正整数 M,表示有 M 个待判断的正整数。约定 1≤M≤100 。 从第 2 行开始的 M 行,每行一个待判断的正整数。约定这些正整数均小于 10'8' 。
输出描述 输出 M 行,如果对应的待判断正整数为自幕数,则输出英文大写字母 'T',否则输出英文大写字母 'F'。
【问题分析】 对于每个待判断的正整数,我们需要判断它是否是自幂数。具体地,我们可以将该正整数转化为字符串,然后遍历字符串中的每个字符,将每个字符的 N 次方之和计算出来,并与原正整数进行比较,如果相等,则该正整数是自幂数。
【算法思路】
- 读取输入的正整数的个数 M;
- 循环 M 次,读取每个待判断的正整数;
- 将每个正整数转化为字符串;
- 遍历字符串中的每个字符,将每个字符的 N 次方之和计算出来;
- 将计算结果与原正整数进行比较,如果相等,则输出 'T',否则输出 'F'。
【算法实现】
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
bool isSelfNumber(int num, int n) {
string strNum = to_string(num);
int sum = 0;
for (char c : strNum) {
sum += pow(c - '0', n);
}
return sum == num;
}
int main() {
int M;
cin >> M;
for (int i = 0; i < M; i++) {
int num;
cin >> num;
if (isSelfNumber(num, num)) {
cout << "T" << endl;
} else {
cout << "F" << endl;
}
}
return 0;
}
【输入样例】 5 153 1634 12345 1111 1234567
【输出样例】 T T F F F
原文地址: https://www.cveoy.top/t/topic/qoNO 著作权归作者所有。请勿转载和采集!