求水仙花数的定义为:如果一个数字与它各位数立方之和相等,这个数字就是水仙花数。eg:153=1*1*1+5*5*5+3*3*3.请写出一个函数用来找出所有的水仙花数并尽可能提高这个函数的执行速度。
【从该题已知,数值范围在100~1000】
第一种:
public static void main(String[] args){
int i, j, k, n = 100, m = 1;
while (n < 1000) {
i = n / 100;
j = (n - i * 100) / 10;
k = n - i * 100 - j * 10;
if (Math.pow(i, 3) + Math.pow(j, 3) + Math.pow(k, 3) == n)
System.out.println("找到第" + m++ + "个水仙花数:" + n);
n++;
}
}
打印结果:
第二种:
public static void main(String[] args) {
for (int i =100; i < 1000; i++) {
isWaterFlowerNumber(i);
}
}
public static boolean isWaterFlowerNumber(int num){
int tempnum = num;
int j= 0; //存放每一位的乘积
while (tempnum>0 ) {
j = (int)(j+Math.pow(tempnum%10,3));
tempnum = tempnum/10;
}
if(num == j){
System.out.println(num+ " 是水仙DEOE 花数");
return true;
}else{
return false;
}
}
打印结果:
了解:
Math.pow(x,y)使用注意事项
JavaScript pow() 方法-W3School 【虽然是JS的,但Java的也差不多的用法】
第二种扩展,打印出“100~10000”范围的水仙花数:
public static void main(String[] args) {
for (int i =100; i < 10000; i++) {
isWaterFlowerNumber(i);
}
}
public static boolean isWaterFlowerNumber(int num){
int tempnum = num;
int a=0;
if(num<1000)
a=3;
else
a=4;
int j= 0; //存放每一位的乘积
while (tempnum>0 ) {
j = (int)(j+Math.pow(tempnum%10,a));
tempnum = tempnum/10;
}
if(num == j){
System.out.println(num+ " 是水仙DEOE 花数");
return true;
}else{
return false;
}
}
打印结果: