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。

相关推荐
q***57743 分钟前
Spring Boot 实战:轻松实现文件上传与下载功能
java·数据库·spring boot
q***56387 分钟前
Spring Boot 集成 Kettle
java·spring boot·后端
stevenzqzq8 分钟前
android recyclerview缓存_缓存问题解决办法
android·java·缓存
武子康8 分钟前
Java-174 FastFDS 从单机到分布式文件存储:实战与架构取舍
java·大数据·分布式·性能优化·系统架构·dfs·fastdfs
失散1310 分钟前
分布式专题——56 微服务日志采集与分析系统实战
java·分布式·微服务·架构
py有趣12 分钟前
LeetCode算法学习之鸡蛋掉落
学习·算法·leetcode
失散1313 分钟前
分布式专题——57 如何保证MySQL数据库到ES的数据一致性
java·数据库·分布式·mysql·elasticsearch·架构
小马爱打代码27 分钟前
RabbitMQ:系统学习笔记
笔记·学习·rabbitmq
点云SLAM29 分钟前
C++ 中dynamic_cast使用详解和实战示例
开发语言·c++·类型转换·dynamic_cast·c++多态·c++继承
YJlio32 分钟前
进程和诊断工具速查手册(8.13):VMMap / DebugView / LiveKd / Handle / ListDLLs 一页式现场排障清单
数据库·笔记·学习