java基础算法之水仙花数

本文介绍了一种求解水仙花数的算法实现。水仙花数是一种特殊的三位数,其特征是个位、十位和百位数字的立方和等于该数本身。通过Java编程演示了如何遍历100至999之间的所有数字,并提取每位数字进行验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package mr.y.arithmetic;
/**
* 题目:打印出所有的”水仙花数”,所谓”水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
* 例如: 153是一个”水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
*
* 分析: 题目说了水仙花数是一个三位数 那么我们查找的范围就已经确定到了 100~999之间
* 现在的任务 就是我们要怎样获取 每一位的数值 ?
* 一般情况下 假设我们要取 num 的个位上的数字 , 最直接的做法就是num%10 对其取余
* 例如 123%10 = 3 321%10 = 1 等等
* ok 这样就解决了 个位数字 取值的问题, 但是问题又来了, 我 们怎么获取十位上的数字?
* 是不是可以用100对 num进行取余呢? 我们试一下
* 假设 num = 361, 那么 361%100 = 61 看来好像不是这样, 我们需要变换一下思路。
* 我们可不可以把 十位 变成 个位 呢?如果能把 十位 数字 变成 个位数字 那么按照上面的方法
* 我们就可以获取 到 十位 上的数字了
* 想一想 有没有什么 运算可以做到呢, 想来想去也就只有 除法(/)可以做到了
* num%10 = 个位
* num/10%10 = 十位
* num/10/10%10 = 百位
*
*/
public class TestDaffodilNumber {

public static void main(String[] args) {
    for(int num=100; num<1000; num++){
        boolean bool = getDaffodilNumber(num);
        if(bool == true){
            System.out.print(num+"\t");
        }
    }
}

public static boolean getDaffodilNumber(int num){
    int sum = 0 ;
    int temp = num;
    int length = String.valueOf(num).length();
    if(num<100 || num>999){
        return false;
    }

    for(int i=0; i<length; i++){
        int num1 = temp%10;
        temp = temp/10;
        sum = sum + num1*num1*num1;
    }
    if(sum == num){
        return true;
    }
    return false;
}

}

/**
* 程序结束, 当然啦 也可以不用这么麻烦 你完全可以 把 每个位获取到 就好像 下面这样
* num%10 = 个位
* num/10%10 = 十位
* num/10/10%10 = 百位
* int sum = 个位个位个位 + 十位十位十位 + 百位百位百位
* if(sum == num){
* ….
* }
*
* 虽然这样简单粗暴, 但是我不喜欢 因为不够灵活 所以我直接pass了 。
* 最后还是 希望大神 给予指正, 非常感谢。
* 时间:2017年1月10日11:47:38
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值