#39855: 阿姆斯壯數


max970228@gmail.com (Max Chen)

學校 : 不指定學校
編號 : 244631
來源 : [36.227.152.83]
最後登入時間 :
2024-04-05 22:36:50
a040. 阿姆斯壯數 | From: [36.227.152.83] | 發表日期 : 2024-04-06 12:41

#include <iostream>
#include <cmath>
#include <vector>

// 函数计算一个整数的位数
int getNumberOfDigits(int num) {
    int digits = 0;
    while (num) {
        digits++;
        num /= 10;
    }
    return digits;
}

// 函数计算并返回一个整数的每个位数的次方和
int sumOfPowers(int num) {
    int sum = 0;
    int digits = getNumberOfDigits(num);
    int originalNum = num;
   
    while (num) {
        int digit = num % 10; // 获取当前最低位的数字
        sum += std::pow(digit, digits); // 计算该位数字的次方并加到总和中
        num /= 10; // 移除当前最低位的数字,准备处理下一位
    }
   
    return sum;
}

// 主函数
int main() {
    int m, n;
    std::cin >> m >> n;

    // 存储找到的 Armstrong 数
    std::vector<int> armstrongNumbers;

    // 遍历给定范围内的所有数字并检查它们是否是 Armstrong 数
    for (int i = m; i <= n; ++i) {
        if (i == sumOfPowers(i)) { // 如果数字等于其各个位数的次方和,则是 Armstrong 数
            armstrongNumbers.push_back(i);
        }
    }

    // 输出结果
    if (armstrongNumbers.empty()) {
        std::cout << "none";
    } else {
        for (int num : armstrongNumbers) {
            std::cout << num << " ";
        }
    }
    std::cout << std::endl;

    return 0;
}
 
ZeroJudge Forum