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 次方之和计算出来,并与原正整数进行比较,如果相等,则该正整数是自幂数。

【算法思路】

  1. 读取输入的正整数的个数 M;
  2. 循环 M 次,读取每个待判断的正整数;
  3. 将每个正整数转化为字符串;
  4. 遍历字符串中的每个字符,将每个字符的 N 次方之和计算出来;
  5. 将计算结果与原正整数进行比较,如果相等,则输出 '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

C++ 判断自幂数 - 算法解析与实现

原文地址: https://www.cveoy.top/t/topic/qoNO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录