题目
水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)。编程求出所有三位的水仙花数。(扩展为n位)
思路
- 根据位数先确定遍历范围用fromnum表示起始数字 tonum表示结束数字
- 一个变量sum保存该数字的和,一个变量product保存每位数字的n次方,这里如果用数学类方法pow(j,n)更简单,就不用遍历了,但要注意该方法返回double类型,要强制转换为int
- 如果遍历到的数字与sum相等则是水仙花数
具体代码实现:
private static void narcissus(int count) {
int fromnum = 1;
int tonum = 1;
for (int i = 1; i < count; i++) {
fromnum *= 10;
}
tonum = fromnum*10;
for (int i = fromnum; i < tonum; i++) {
int sum = 0;//保存立方和
for (int m = i; m > 0; m /=10) {
//保存每位数的n次方
int product = (int) Math.pow(m%10, count);
sum += product;
}
if (sum == i) {
System.out.println(i);
}
}
}