- ?:你知道什么是"水仙花数 "吗?听说是指一个三位数,其各位数字立方和等于该数本身。比如153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。你能打印出所有的水仙花数吗?
- ?:花里胡哨,其实就一个for循环的事…
import org.junit.Test;
public class narcissusNumber {
@Test
public void printNarcissus() {
System.out.println("三位数的水仙花数有: ");
for (int i = 100; i < 1000; i++) {
if (i == numberSum(i)) {
System.out.print(i + " ");
}
}
}
public int numberSum(int num) {
String s = String.valueOf(num);
int h = s.charAt(0) - 48; // 0的ASCII码是48
int t = s.charAt(1) - 48;
int z = s.charAt(2) - 48;
int sum = (int) (Math.pow(t, 3) + Math.pow(h, 3) + Math.pow(z, 3));
return sum;
}
}
结果:
-
另外,水仙花数只是自幂数的一种,严格来说3位数的3次幂数才称为水仙花数。
-
附:其他位数的自幂数名字
一位自幂数:独身数
两位自幂数:没有
三位自幂数:水仙花数
四位自幂数:四叶玫瑰数
五位自幂数:五角星数
六位自幂数:六合数
七位自幂数:北斗七星数
八位自幂数:八仙数
九位自幂数:九九重阳数
十位自幂数:十全十美数 -
?:那怎么求自幂数?
-
?:也不难吧,只是再多加一个条件判定罢了
import org.junit.Test;
public class selfNumber {
// 因为是int类型,只能计算1位到9位数哟
public void printSelfNumber(int len) {
int min = (int) (Math.pow(10, len - 1));
int max = (int) (Math.pow(10, len)) - 1;
for (int i = min; i <= max; i++) {
if (i == numberSum(i)) {
System.out.println(i);
}
}
}
public int numberSum(int num) {
String s = String.valueOf(num);
int sum = 0;
for (int i = 0; i < s.length(); i++) {
sum += (int) (Math.pow(s.charAt(i) - 48, s.length()));
}
return sum;
}
@Test
public void test() {
printSelfNumber(3);
printSelfNumber(4);
}
}