水仙花数的计算算法

水仙花数是指一个n位正整数,它的每个位上的数字的n次幂之和等于它本身。例如,153是一个三位水仙花数。本文介绍了水仙花数的概念,起源,以及如何通过编程实现寻找特定位数的水仙花数。通过逐位计算和累加,可以判断一个数是否为水仙花数。
摘要由CSDN通过智能技术生成

水仙花数

水仙花数是指一个n位正整数(n≥3),它的每个位上的数字的n次幂之 和等于它本身。水仙花数也是一种 具有特殊性质的数。

什么是水仙花数

水仙花数最先是由英国数学家哈代(G.H.Hardy) 发现的。他发现一些三位数满足如下奇特的现象:

153=1³+5³+3³

370=3³+7³+0³

371=3³+7³+1³

407=4³+0³+7³

简单地说,这些三位正整数在数值上等于其各位数字的立方之和(即3次幂之和)。哈代称为“水仙花数”。

四位的水仙花数有如下3个:(四位数,n在此时是4)

1634=14ⁿ+64ⁿ+3ⁿ+4ⁿ

8208=8ⁿ+2ⁿ+0ⁿ+84ⁿ
9474=9ⁿ+4ⁿ+7ⁿ+4ⁿ

数学家在理论.上证明,最大的水仙花数不超过34位。因此,水仙花数是有限的。这种推广的水仙花数有时也称为阿姆斯特朗数。不同位数的水仙花数的个数如下:

●三位水仙花数:共4个;

●四位水仙花数:共3个;

●五位水仙花数:共3个;

●六位水仙花数:共1个;

.七位水仙花数:共4个;

●八位水仙花数: 共3个;

●九位水仙花数:共4个;

●十位水仙花数:共1个;


做题思路:
输入参数n表示需要查找的水仙花数的位数。
首先计算起此据和终止数据,然后对所有数据逐个判断。
在进行判断时将数据的各个位分离出来,并逐位进行n次幂的累加。
最后判断累加的数是否与原来的数相等,输出即可;
(1)计算数据num的个位数,并将其赋值给temp。

(2)计算个位数的n次幂,并累加到sum中。

(3) 移位操作,将num减去个位数temp后,再除10,便相当于*数据的右移操作。此时减少一位,并将结果重新赋值给num。
(4) 重复步骤(1)的操作,直到所有的位数都得到处理为止。

这样便分离出了n位的数字并得到了其”次幂的累加和。**

代码如下:

public static void main(String[] args) {
		//最小的水仙花数是3位水仙花;
		int n=3;
		System.out.println("三位水仙花数:");
		NarciSsus(n);
		
		System.out.println("四位水仙花数:");
		n=4;
		NarciSsus(n);
		
		System.out.println("五位水仙花数:");
		n=5;
		NarciSsus(n);
	}
	//参数n是需要查找的水仙花数的位数;
	public static void 	NarciSsus(int n) {
		
		long i,start,end,temp,num,sum;// start起始数据,end结束数据;
		int j;
		//起始数据 100;
		start=(long)Math.pow(10, n-1);//Math.pow 返回第一个参数的第二个参数次方
		//终止数据
		end=(long)Math.pow(10, n)-1;
		
		for ( i = start; i <end; i++) {			
			temp = 0;
			 num = i;
			 sum=0;
			 for(j=0;j<n;j++) {//取余求每个位数上的数
				 
				 temp = num%10;	
				 sum=sum+(long)Math.pow(temp, n);	//计算次幂和
				 //移位;
				 num=(num-temp)/10;		
			 }
			 if(sum==i) {	//n次幂之和等于它本身,则输出;
				 System.out.println(i);
			 }
			
		}
	}

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值