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

 更新时间:2025年12月13日 11:23:07   作者:ULTRA??  
水仙花数是指一个三位数,其各位数字的立方和恰好等于该数本身,这篇文章主要介绍了利用c++判断水仙花数并输出的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

以下是使用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++判断水仙花数并输出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 利用Matlab复刻两款粒子爱心动画效果

    利用Matlab复刻两款粒子爱心动画效果

    最近电视剧《点燃我,温暖你》大火,蹭一下热度,发一下MATLAB画爱心的代码,写的比较随意,大家可以自行调整粒子大小和颜色啥的
    2022-11-11
  • 带你了解C++this指针的用法及其深究

    带你了解C++this指针的用法及其深究

    这篇文章主要介绍了C++中this指针的用法,对初学者而言是非常重要的概念,必须加以熟练掌握,需要的朋友可以参考下,希望能给你带来帮助
    2021-08-08
  • C++快速排序超详细讲解

    C++快速排序超详细讲解

    快速排序是一种高效的排序算法,通过分治法将数组划分为两部分,递归排序,直到整个数组有序,通过代码解析和示例,详细解释了快速排序的工作原理和实现过程,需要的朋友可以参考下
    2025-03-03
  • c语言 数据存储与原码 反码 补码详细解析

    c语言 数据存储与原码 反码 补码详细解析

    不知道你是否和我一样好奇,学习编程语言的同时想,各个数据类型是怎样在我们的内存中储存的呢,如果你仔细深入了解的话,你会了解其中的乐趣,了解科学家们的伟大,了解c语言
    2022-02-02
  • C++实现Huffman的编解码

    C++实现Huffman的编解码

    这篇文章主要为大家详细介绍了C++实现Huffman的编解码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C语言实现两个矩阵相乘

    C语言实现两个矩阵相乘

    这篇文章主要为大家详细介绍了C语言实现两个矩阵相乘的程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • 为什么获取环境变量getenv小心有坑

    为什么获取环境变量getenv小心有坑

    这篇文章主要介绍了获取环境变量getenv小心有坑问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • C++中MFC Tab Control控件的使用详解

    C++中MFC Tab Control控件的使用详解

    这篇文章主要介绍了C++中MFC Tab Control控件的使用详解的相关资料,需要的朋友可以参考下
    2015-06-06
  • 深入了解C++中基于模板的类型擦除

    深入了解C++中基于模板的类型擦除

    在C\C++中主要有三种类型擦除的方式:基于void*的类型擦除、面向对象的类型擦除和基于模板的类型擦除,本文主要为大家详细介绍基于模板的类型擦除的相关知识,需要的可以了解下
    2023-12-12
  • C语言实现个人财务管理

    C语言实现个人财务管理

    这篇文章主要为大家详细介绍了C语言实现个人财务管理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论