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;
}

以上代码实现了判断自幂数的功能,并给出了两个输入样例的测试结果。希望本文能够帮助读者更好地理解自幂数的概念及算法,并能够独立完成类似的编程任务。

C++ 判断自幂数算法详解及代码实现

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

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