问题描述:
水仙花数是指一个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+"是水仙花数");
}
}
}
}
结果: