当前位置: 代码网 > it编程>编程语言>C/C++ > 利用c++判断水仙花数并输出示例代码

利用c++判断水仙花数并输出示例代码

2025年12月13日 C/C++ 我要评论
以下是使用c++实现的相同逻辑代码:#include <iostream>#include <vector>#include <string>#include &l

以下是使用c++实现的相同逻辑代码:

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

// 判断一个数是否为水仙花数
bool isnarcissistic(int n) {
    std::string numstr = std::to_string(n);
    int numdigits = numstr.length();
    int sum = 0;
    
    // 遍历每一位数字
    for (int i = 0; i < numdigits; i++) {
        // 将字符数字转换为整数
        int digit = numstr[i] - '0';
        // 计算该位数字的 n 次幂并累加
        sum += static_cast<int>(std::pow(digit, numdigits));
    }
    
    // 判断总和是否等于原数
    return sum == n;
}

// 查找指定范围内的水仙花数
std::vector<int> findnarcissisticnumbers(int min, int max) {
    std::vector<int> results;
    for (int i = min; i <= max; i++) {
        if (isnarcissistic(i)) {
            results.push_back(i);
        }
    }
    return results;
}

int main() {
    // 输出所有3位水仙花数(100-999)
    std::vector<int> narcissisticnumbers = findnarcissisticnumbers(100, 999);
    
    // 格式化输出
    if (!narcissisticnumbers.empty()) {
        std::cout << "3位水仙花数有:" << std::endl;
        for (int num : narcissisticnumbers) {
            std::cout << num << std::endl;
        }
    } else {
        std::cout << "该范围内没有水仙花数" << std::endl;
    }
    
    return 0;
}

以下是使用纯数学运算(不用字符串转换)的替代版本:

#include <iostream>
#include <vector>

// 判断一个数是否为水仙花数(纯数学方法)
bool isnarcissistic(int n) {
    int original = n;
    int numdigits = 0;
    int temp = n;
    
    // 计算位数
    while (temp > 0) {
        numdigits++;
        temp /= 10;
    }
    
    int sum = 0;
    temp = original;
    
    // 遍历每一位数字
    while (temp > 0) {
        int digit = temp % 10;
        // 计算digit的numdigits次幂
        int power = 1;
        for (int i = 0; i < numdigits; i++) {
            power *= digit;
        }
        sum += power;
        temp /= 10;
    }
    
    // 判断总和是否等于原数
    return sum == original;
}

// 查找指定范围内的水仙花数
std::vector<int> findnarcissisticnumbers(int min, int max) {
    std::vector<int> results;
    for (int i = min; i <= max; i++) {
        if (isnarcissistic(i)) {
            results.push_back(i);
        }
    }
    return results;
}

int main() {
    // 输出所有3位水仙花数(100-999)
    std::vector<int> narcissisticnumbers = findnarcissisticnumbers(100, 999);
    
    // 格式化输出
    if (!narcissisticnumbers.empty()) {
        std::cout << "3位水仙花数有:" << std::endl;
        for (int num : narcissisticnumbers) {
            std::cout << num << std::endl;
        }
    } else {
        std::cout << "该范围内没有水仙花数" << std::endl;
    }
    
    return 0;
}

两个版本的功能相同,都能正确找到153、370、371、407这4个3位水仙花数。第一个版本更接近原lua代码的逻辑,使用字符串处理;第二个版本使用纯数学运算,在某些情况下性能更好。

总结

到此这篇关于利用c++判断水仙花数并输出的文章就介绍到这了,更多相关c++判断水仙花数并输出内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com