总所周知,水仙花数没什么高速的数学解法,尤其是在不确定位数时。
但暴力解法实在直接粗暴,为了更唬人代码美学(真的有那样的东西吗),我用递归写了个水仙花数。
import java.util.Scanner;
public class Main {
static int n;
// 算次幂
static int power(int NUM) {
int num=NUM;
for (int i = 1; i < n; i++) {//因为NUM==i,而不是1,所以NUM的n次方只要循环n-1次
NUM *= num;
}
return NUM;
}
// 算数位
static int digital(int N) {
int num = 1;
for (int i = 1; i < N; i++) {
num *= 10;
}
return num;
}
/*N为层数
num1、num2分别寄存`x^n+y^n+……=10^(n-1)*x+10^(n-2)*y+……`等号两边的值,用于比较大小*/
static void cycleJudge(int N,int num1,int num2){
if(N==1){
for(int i=0;i<=9;i++){
if(num1+ power(i)==num2+digital(N)*i) {
System.out.println(num1+power(i));
}
}
}else{
int i=0;
for(i=(N==n)?1:0;i<=9;i++){
cycleJudge(N-1,num1+ power(i),num2+digital(N)*i);
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
cycleJudge(n, 0, 0);
}
}