水仙花数
水仙花数是指一个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);
}
}
}
结果如下: