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。

相关推荐
真实的菜2 分钟前
消息队列处理模式:流式与批处理的艺术
java
泽020212 分钟前
C++之STL--list
开发语言·c++·list
盖世英雄酱5813617 分钟前
Java 内存管理技巧(新手必看集合篇)
java
码农小灰19 分钟前
Java 8 Stream API 入门到实践详解
java·java案例
步、步、为营24 分钟前
.NET 事件模式举例介绍
java·开发语言·.net
程序猿tu26 分钟前
Axios学习笔记
笔记·学习
cui_hao_nan27 分钟前
设计模式——模板方法
java·设计模式
小吕学编程27 分钟前
HttpServletRequest常用方法
java·http
在未来等你28 分钟前
Java并发编程实战 Day 11:并发设计模式
java·设计模式·多线程·并发编程·threadlocal·生产者消费者·读写锁
李少兄40 分钟前
解决 idea提示`SQL dialect is not configured` 问题
java·sql·intellij-idea