水仙花数(Java)

水仙花数(Java)

水仙花数(Narcissistic Number)是一个数学术语,是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。例如,153就是一个水仙花数,因为13+53+3^3=153。

水仙花数的计算步骤可以分为以下几步:

  1. 将给定的数字的每个位分离出来。
  2. 对每个位上的数字进行n次幂的计算,n为数字的位数。
  3. 将每个位上的数字的n次幂相加。
  4. 将相加的值与输入的数进行比较,如果相等,则说明数字是一个水仙花数。
//这是一段最简单的求三位数的水仙花数代码,其中没有用到什么方法
public class Demo_01_水仙花数 {
	public static void main(String[] args) {
		Scanner sc = new Scanner (System.in);
		
		System.out.println("三位数的水仙花数:");
		for(int i=100;i<1000;i++) {
			int bai = i/100;
			int shi = i%100/10;
			int ge = i%10;
			if(i==(bai*bai*bai+shi*shi*shi+ge*ge*ge)) {
				System.out.println(i+"是水仙花数。");
			}
		}
	}
}

打印输出的结果是:

三位数的水仙花数:
153是水仙花数。
370是水仙花数。
371是水仙花数。
407是水仙花数。

以下是输入一个数,打印一百到该数之间所有的水仙花数:

(代码运行流程及思路写在了代码中方便阅读理解)

/**
 * 水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。
 * 例如,153是一个三位数的水仙花数,因为1³ + 5³ + 3³ = 153。
 */
public class NarcissisticNumbers {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        
        System.out.println("请输入一个数:");
        int number = input.nextInt();

        System.out.println("100到" + number + "之间的水仙花数有:");
        //利用for循环,迭代检查当前数字是否是水仙花数,传入i,返回sum
        for (int i = 100; i <= number; i++) {
            if (isNarcissisticNumber(i)) {
            	//判断是水仙花数之后打印输出
                System.out.println(i);
            }
        }
        //用于关闭Scanner对象所代表的输入流,这样可以确保在使用完输入流后释放资源,把你面内存泄漏问题
        input.close();
    }

    // 判断一个数是否为水仙花数
    public static boolean isNarcissisticNumber(int num) {
        //用于接受整数参数num。
    	int originalNum = num;
    	//初始化sum变量,用于计算数字的各位数字的n次幂之和。
        int sum = 0;
        //返回以10为底数的对数,得到数字的位数,并将n次幂加到sum中
        int digits = (int) Math.log10(num) + 1;
        //使用while循环,将每个位上的数字提取出来,并将其n次幂加到sum中
        //当数字为0,退出循环
        while (num > 0) {
            int digit = num % 10;
            sum += Math.pow(digit, digits);
            num /= 10;
        }
        //判断sum是否等于原始值,如果相等则返回(boolean)true,表示该数是水仙花数
        return sum == originalNum;
    }
}

打印输出的结果:

请输入一个数:
23453
10023453之间的水仙花数有:
153
370
371
407
1634
8208
9474
其实除了计算之外,水仙花数也有很多有趣的特点和历史背景:

​ 水仙花数的概念源于古希腊神话中的纳西索斯(Narcissus),他因为自恋而被神惩罚,最终爱上了自己的倒影。这个故事被莎士比亚等作家运用,成为了文学上的经典题材。而数学家们则从中得到了灵感,创造了水仙花数这个概念。

​ 水仙花数在数学、计算机科学、密码学等领域都有应用。例如,在密码学中,水仙花数可以用来生成密码和密钥,因为它们的位数大、容易记忆、难以被破解等特点。

​ 总之,水仙花数是一个有趣而富有传奇色彩的数学概念,虽然在实际应用中并不常见,但它仍然是一个被广泛研究的话题,具有理论意义和实际应用价值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值