[GESP202306 二级] 自幂数判断

[GESP202306 二级] 自幂数判断

GESP二级真题,多重循环应用,难度★✮☆☆☆。

luogu-B3841 [GESP202306 二级] 自幂数判断

题目要求

题目描述

自幂数是指,一个 NN 位数,满足各位数字 NN 次方之和是本身。例如,15315333 位数,其每位数的 33 次方之和,13+53+33=1531^3+5^3+3^3=153,因此 153153 是自幂数;1634163444 位数,其每位数的 44 次方之和,14+64+34+44=16341^4+6^4+3^4+4^4=1634,因此 16341634 是自幂数。现在,输入若干个正整数,请判断它们是否是自幂数。

输入格式

输入第一行是一个正整数 MM,表示有 MM 个待判断的正整数。约定 1M1001 \le M \le 100

从第 22 行开始的 MM 行,每行一个待判断的正整数。约定这些正整数均小于 10810^8

输出格式

输出 MM 行,如果对应的待判断正整数为自幂数,则输出英文大写字母 T\texttt T,否则输出英文大写字母 F\texttt F

提示

不需要等到所有输入结束在依次输出,可以输入一个数就判断一个数并输出,再输入下一个数。

样例输入 #1

3
152
111
153

样例输出 #1

F
F
T

样例输入 #2

5
8208
548834
88593477
12345
5432

样例输出 #2

T
T
T
F
F

题目分析

解题思路

  1. 首先读取输入的整数个数 nn
  2. 使用一个循环来遍历每个输入的整数。
  3. 对于每个整数,首先计算其位数 powspows
  4. 然后计算每个位数的 powspows 次方和 sumsum
  5. 如果 sumsum 等于当前整数,输出 “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 认证学习微信公众号
GESP/CSP 认证学习微信公众号
Last updated on