c++求水仙数/c++水仙花数学习

C++水仙花数-深入浅出.学习与讲解

水仙花数,又称阿姆斯特朗数,是指一个n位数 (n≥3),它的每个位上的数字的n次幂之和等于它本身。例如:153是一个水仙花数,因为153=1³+5³+3³。

在C++中,我们可以使用循环和条件判断来找出所有的水仙花数。下面是一个简单的代码示例,该代码会找出所有三位的水仙花数:

cpp 复制代码
#include <iostream>
#include <cmath>

int main() {
    int num;
    std::cout << "请输入一个三位数: ";
    std::cin >> num;

    if (num < 100 || num > 999) {
        std::cout << "输入错误,请输入一个三位数!" << std::endl;
        return -1;
    }

    std::cout << "水仙花数有: ";
    for (int i = 100; i <= 999; i++) {
        int a = i / 100;  // 百位数字
        int b = (i % 100) / 10;  // 十位数字
        int c = i % 10;  // 个位数字
        if (i == a * a * a + b * b * b + c * c * c) {
            std::cout << i << " ";
        }
    }
    return 0;
}

代码注释:

  1. 首先,我们包含了两个头文件:iostream用于输入输出,cmath用于数学运算。
  2. main()函数中,我们首先从用户那里获取一个三位数。如果输入的不是三位数,程序会输出错误信息并退出。
  3. 然后,我们使用一个for循环遍历所有的三位数。对于每个数字,我们提取出它的百位、十位和个位数字。
  4. 使用条件判断,我们检查这个数字是否是水仙花数。如果是,我们就输出这个数字。
  5. 最后,程序结束并返回0。

下面是一个while循环版本的代码:

c 复制代码
#include <iostream>  
#include <cmath>  
  
int main() {  
    int num, hundreds, tens, ones;  
    std::cout << "请输入一个三位数: ";  
    std::cin >> num;  
  
    if (num < 100 || num > 999) {  
        std::cout << "输入错误,请输入一个三位数!" << std::endl;  
        return -1;  
    }  
  
    while (num > 0) {  
        hundreds = num / 100;  // 百位数字  
        tens = (num % 100) / 10;  // 十位数字  
        ones = num % 10;  // 个位数字  
        num = hundreds + tens + ones;  // 重置num为各位数字之和  
    }  
  
    if (num == hundreds * hundreds * hundreds + tens * tens * tens + ones * ones * ones) {  
        std::cout << num << " 是水仙花数" << std::endl;  
    } else {  
        std::cout << num << " 不是水仙花数" << std::endl;  
    }  
    return 0;  
}

代码与之前的版本略有不同,但核心逻辑是一样的。以下是代码的详细讲解:

  1. 输入获取:首先,我们从用户那里获取一个三位数。如果输入的不是三位数,程序会输出错误信息并退出。
  2. while循环:为了使用while循环,我们首先需要将数字分解为其各个位上的数字。然后,我们不断地将数字分解为其各个位上的数字,直到这个数字变为个位数。在每次迭代中,我们都更新num变量为当前数字的各个位上的数字之和。这样,当循环结束时,num将只包含个位数。

3. 判断是否为水仙花数:最后,我们检查num是否是水仙花数。如果是,我们输出相应的信息;否则,我们输出该数字不是水仙花数的信息。

4. 返回值:程序结束并返回0。

相关推荐
独断万古他化1 天前
【抽奖系统开发实战】Spring Boot 抽奖系统全链路总结:从架构到落地的实践复盘
java·spring boot·后端·架构·系列总结
编程之升级打怪1 天前
简单的测试搜索词的分割算法思路
java·算法
码界奇点1 天前
基于Spring MVC和MyBatis的妖气山视频管理系统设计与实现
java·spring·毕业设计·mvc·mybatis·源代码管理
安逸sgr1 天前
MCP 协议深度解析(八):Prompts 提示模板与 Sampling 采样机制!
人工智能·分布式·学习·语言模型·协议·mcp
东离与糖宝1 天前
小米MiMo-V2-Pro开放调用,Java后端快速接入全流程实战
java·人工智能
Book思议-1 天前
【数据结构实战】双向链表尾插法
c语言·数据结构·链表
.select.1 天前
虚函数和虚表
开发语言·c++·算法
王ASC1 天前
Java不重启加载新的class文件
java·开发语言
靠沿1 天前
【优选算法】专题十七——多源BFS(最短路径问题)
java·算法·宽度优先
科技林总1 天前
【系统分析师】12.2 软件架构风格
学习