C++水仙花数

//
// Created by 卢澳 on 2022/11/11.
//

//输出所有的“水仙花数”,所“水仙花数”是指一个3位数,其各位数字立方和等于
//该数本身。例如,153是一水仙花数因为153=13+53+3(本题是教材第5章第8题)。

#include <iostream>
using namespace std;

int main(void) {
    //分析题目我们需要做两件事,分别是输出所有的三位数和检查他们是否满足各位数字立方和等于该数本身本身这一条件
    //
    //个 : individual 十: ten 百 :hundred(刻意百度的)

    int cube(int num);//这是我自己在下面定义的一个求立方的函数,不然直接三个数都手动立方不好看也麻烦

    for (int hundred = 1; hundred <= 9; hundred++) {//注意百位不能为0
        for (int ten = 0; ten <= 9; ten++) {
            for (int individual = 0; individual <= 9; individual++) {
                //cout<<hundred*100+ten*10+individual<<endl;//把这些数输出试试看
                //检查是否满足各位数字立方和等于该数本身本身
                //满足输出
                if (hundred * 100 + ten * 10 + individual == cube(hundred) + cube(ten) + cube(individual)) {
                    cout << hundred * 100 + ten * 10 + individual << endl;
                }
            }
        }
    }

    //下面这个方法实在论坛找的的,原理我也写了,可以看一看,俩种方法都是对的
    //https://blog.csdn.net/cozyxiaoyang/article/details/111160254
    //可能会更简单一点,不过更难理解
    //其实说穿了,上面函数的思路是用三个数(个十百位)来组合生成三位数,
    //而下面函数是直接从100-999这些三位数中求解他们的个十百位上各是什么数
    //下面简单说一下这个从多位数中分离每个位上数字的算法
    //给万位数(5位)12345求他的万位是啥,很简单12345//10000=1(我用'//'代表整除,即只保留结果的整数位)
    //那么给一个n位数N求他的最高位呢?答案是N//n,更进一步求12345的千位呢?如果你不知道不如想想2345的千位怎么求?
    //是不是2345//1000,那么怎么把12345变成2345呢?取余就好了啊,12345求千位的答案是12345%10000//1000
    //这下我们可以做出总结:求一个n位数N的第m位数字(m<=n):[N%(10^m)]//[10^(m-1)]
    //利用这点我们设计新的算法如下:
//    int hundred,ten,individual;
//    for(int n=100;n<=999;n++){
//        hundred = (n%1000)/100;
//        ten = (n%100)/10;
//        individual = (n%10)/1;
//        if (n == cube(hundred) + cube(ten) + cube(individual)) {
//            cout << n << endl;
//        }
//    }
    return 0;



}

int cube(int num){
    return num*num*num;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盧瞳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值