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。

相关推荐
盖世英雄酱581368 小时前
Read timed out问题 排查
java·数据库·后端
狼爷8 小时前
破解 JetBrains 的学生,后来都成了它的 “推销员”:一场用习惯换市场的长期战
java·jetbrains
你怎么知道我是队长8 小时前
C语言---循环结构
c语言·开发语言·算法
.豆鲨包8 小时前
【Android】Viewpager2实现无限轮播图
android·java
BXCQ_xuan8 小时前
软件工程实践二:Spring Boot 知识回顾
java·spring boot·后端
老赵的博客8 小时前
c++ unqiue指针
java·jvm·c++
wuxuanok9 小时前
SpringBoot -原理篇
java·spring boot·spring
柿蒂9 小时前
从if-else和switch,聊聊“八股“的作用
android·java·kotlin
二饭9 小时前
Spring Boot 项目启动报错:MongoSocketOpenException 连接被拒绝排查日记
java·spring boot·后端
程序猿编码9 小时前
基于 Linux 内核模块的字符设备 FIFO 驱动设计与实现解析(C/C++代码实现)
linux·c语言·c++·内核模块·fifo·字符设备