判断水仙花数及其推广

前言:

本篇博客将带大家了解如何判断水仙花数打印100~999之间的水仙花数将水仙花数推广到一般情况

目录

如何判断水仙花数

打印100~999之间的水仙花数

将水仙花数推广到一般情况


如何判断水仙花数

思路:

在写题目之前,我们必须要了解,什么数才算是水仙花数;


何为水仙花数:

水仙花数是指一个三位数,其各位数字的立方和等于该数本身,例:153=1^3+5^3+3^3


知晓了水仙花数的定义后,我们发现,此题可以通过:

  • 把三位数的每一位数都分别取出来
  • 对每一位数立方(可以通过Math.pow()来实现)
  • 把他们的立方相加

把做法分解以后,代码很快就能得出,如下:

import java.util.Scanner;
public class TestNight { 
  public static void main(String[] args) {
        //输入要判断的数字:
        System.out.println("请输入要判断的数:");
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        //对该数进行判断:
        int tmp = n;
        int sum = 0;
        while(tmp != 0){
            sum += Math.pow(tmp%10,3);
            tmp /=10;
        }
        if(sum == n){
            System.out.println(n+"是一个水仙花数");
        }else{
            System.out.println(n+"不是一个水仙花数");
        }
    }
}

结果:


打印100~999之间的水仙花数:

思路:

学会了如何判断水仙花数,我们再来打印一个范围内的水仙花数就显得极其简单了。我们只需要在判断的外面套一个for循环来限制它的判断范围,然后再将所有满足条件的水仙花数打印即可。

 public class Main {
   public static void main(String[] args) {
        for (int i = 100; i <= 999; i++) {
            int tmp = i;
            int sum = 0;
            //判断部分:
            while(tmp != 0){
                sum += Math.pow(tmp%10,3);
                tmp /=10;
            }
            if(sum == i){
                System.out.print(i+" ");//注意这里选择print,和多打印一个空格均是为了好看。
            }
        }
    }
}

结果:


将水仙花数推广到一般情况

所谓推广到一般情况,就是指有一个n位数,满足其各个位上的数的n次方的和等于它本身

思路:

有了判断水仙花数的基础后,我们很容易发现,推广到一般情况和判断水仙花数就只差了一个求待判断的数的位数(即,判断待判断的数是一个几位数)。

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        //输入一个待判断的数字:
        System.out.println("请输入一个待判断的数字:");
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        //求n的位数:
        int count =0;
        int tmp = n;
        while(tmp != 0){
            count ++;
            tmp /= 10;
        }
        //进行判断:
        tmp = n;
        int sum = 0;
        while(tmp != 0){
            sum += Math.pow(tmp%10,count);
            tmp /= 10;
        }
        if(sum == n){
            System.out.println(n+"满足");
        }
    }
}

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值