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。

相关推荐
一定要AK8 分钟前
Spring 入门核心笔记
java·笔记·spring
A__tao9 分钟前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
研究点啥好呢13 分钟前
Github热门项目推荐 | 创建你的像素风格!
c++·python·node.js·github·开源软件
_dindong14 分钟前
cf1091div2 C.Grid Covering(数论)
c++·算法
AI成长日志14 分钟前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
KevinCyao23 分钟前
java视频短信接口怎么调用?SpringBoot集成视频短信及回调处理Demo
java·spring boot·音视频
沫璃染墨26 分钟前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
迷藏49429 分钟前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
6Hzlia1 小时前
【Hot 100 刷题计划】 LeetCode 17. 电话号码的字母组合 | C++ 回溯算法经典模板
c++·算法·leetcode
_李小白1 小时前
【OSG学习笔记】Day 38: TextureVisitor(纹理访问器)
android·笔记·学习