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'。

简单版内容

【样例输入】 2 153 1634

【样例输出】 T T

C/C++ 代码实现

#include <iostream>
#include <cmath>
using namespace std;

bool isArmstrong(int num) {
    int temp = num, sum = 0, digits = 0;
    // 统计数字位数
    while (temp > 0) {
        digits++;
        temp /= 10;
    }
    temp = num;
    // 计算各位数字的 N 次方之和
    while (temp > 0) {
        int digit = temp % 10;
        sum += pow(digit, digits);
        temp /= 10;
    }
    return sum == num;
}

int main() {
    int M, num;
    cin >> M;
    for (int i = 0; i < M; i++) {
        cin >> num;
        if (isArmstrong(num)) {
            cout << 'T' << endl;
        } else {
            cout << 'F' << endl;
        }
    }
    return 0;
}

优化技巧

  1. 位数统计优化: 可以使用 log10(num) + 1 来获取数字位数,减少循环次数,提高效率。
  2. 循环次数优化: 可以使用 pow(10, digits) 来快速计算数字位数,避免重复计算。
  3. 循环判断优化: 可以使用 if (sum > num) 在计算过程中判断是否可能为自幂数,如果超过,直接退出循环,减少不必要的计算。

总结

以上代码提供了 C/C++ 实现的判断自幂数算法,并附带了优化技巧,希望能帮助您更好地理解和应用自幂数判断算法。您可以根据自己的需求和场景进行修改和优化。

时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 分数:25

C/C++ 自幂数判断算法 - 代码示例与优化技巧

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

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