Java趣味编程案例5----水仙花数

本文介绍了如何使用Java程序找出特定范围内的水仙花数,包括100至999之间的水仙花数以及任意范围内的水仙花数。通过算法解析了水仙花数的概念及其求解过程。

问题描述:
水仙花数是指一个n位数(n>=3),它的每个位上的数字的n次幂之和等于它本身,如1^3+5 ^3+3 ^3=153。
1)求100-999之间的所有水仙花数
2)求任意范围内的水仙花数

第二个问题是第一个问题的拓展,这里我们先求出100–999范围内的水仙花数。

这里我们还是获取数值的各个位上的数,然后对他们求立方再求和,最后和原数值比较,相等则为水仙花数。

package _3InterestingInteger;
/*
求100-999内的水仙花数
 */

public class _3_2_1 {
    public static void main(String[] args) {
        int i,a,b,c;
        for(i=100;i<=999;i++){
            a=i/100;
            b=i%100/10;
            c=i%10;
            if(Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3)==i){
                System.out.println(i+"是水仙花数");
            }
        }
    }
}

结果:
在这里插入图片描述

接下来我们再求任意范围内的水仙花数,因为是任意范围,所以我们就要知道数值的总的位数,然后获取每一位上的数值,最后再立方求和。

package _3InterestingInteger;
/*
求任意位数的水仙花数
 */

public class _3_2_2 {
    public static boolean fun(int i){
        int sum=0;
        int n=(i+"").length();//把数值转成字符串,获取数值的长度
        for(int k=1;k<=n;k++){
            int t1=(int)(i/Math.pow(10,k-1));
            int t2=(int)Math.pow((t1%10),n);//获取最后一位数的值,从个位开始
            sum+=t2;
        }
        if(sum==i){
            return true;
        }else{
            return false;
        }
    }

    public static void main(String[] args) {
        //求某个范围内的水仙花数
        for(int a=100;a<=999999;a++){
            if(fun(a)){
                System.out.println(a+"是水仙花数");
            }
        }
    }
}

结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值