<>问题:求100到999之间的 3位 水仙花数。/ n位水仙花数
<>水仙花数定义:水仙花数的每个位上的数字的 n 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
*
<>3位水仙花数
方法一:(其中用的while循环)
public class Narcissus { public static void main(String[] args) { int num = 100
; int a[] = new int[3]; System.out.print("3位的水仙花数有:\t"); while (num <= 999) {
//用的while循环 int sum = 0; a[0] = num / 100; a[1] = num / 10 % 10; a[2] = num % 10
; for (int i = 0; i < 3; i++) { sum += Math.pow(a[i], 3); //相当于 sum = sum +
(int) Math.pow(a[i], 3); } if (num == sum) { System.out.print(num + "\t"); } num
++; } } }
方法二:(通俗易解版)(其中用的for循环)
public class Narcissus { public static void main(String[] args) { //
1.通过for循环获取[100, 999]之间所有的正整数 for (int i = 100; i < 1000; i++) { // i = 153
//用的for循环 // 2.获取i的个位数、十位数和百位数。 int bit1 = i % 10; int bit2 = i % 100 / 10; int
bit3= i / 100; // 3.1*1*1 + 5*5*5+ 3*3*3 == 153 if (bit1 * bit1 * bit1 + bit2 *
bit2* bit2 + bit3 * bit3 * bit3 == i) { System.out.println(i); } } } }
*
<>n位水仙花数
import java.util.Scanner; public class Narcissus { public static void main(
String[] agrs) { System.out.print("指定最大位数N:"); Scanner input = new Scanner(
System.in); int N = input.nextInt(); input.close(); for (int i = 3; i <= N; i++)
{ int a[] = new int[i]; int num = (int) Math.pow(10, i - 1) + 1; System.out.
print(i + "位的水仙花数有:\t"); while (num <= Math.pow(10, i)) { //num表示取值范围, 数字位数为i
int sum = 0; for (int j = 0; j < i; j++) a[j] = (int) (num / Math.pow(10, j) %
10); for (int j = 0; j < i; j++) sum = sum + (int) Math.pow(a[j], i); if (num ==
sum) System.out.print(num + "\t"); num++; } System.out.print("\n"); } } }