public static int weiShu(int a){
//判断位数
int n = 1;
int w = 0;
while (true){
if((a-n) > 0){
n*=10;
w++;
}else {
return w;
}
}
}
首先,写一个方法来获取位数,当a-n小于0,说明处在n的范围内,如果不在,就让n乘10,w(位数)自增
每次判断相当判断a是不是在[0,10];[10,100];[100,1000]......内
public static int powADD(int a,int n){//返回各位数的总和
// int n = weiShu(a);
int sum = 0;
int arr[] = new int[1000];
int j = 0;
int m = a;
while(j < n-1){
for (int i = 0; i < n - j-1; i++) {
m /= 10;
arr[j] = m;
}
for (int i = 0; i < n - j-1; i++) {
m *= 10;
}
a-=m;
m = a;
j++;
}
arr[j] = (a%10);
for (int i = 0;i < n;i++){
sum += Math.pow(arr[i],n);
}
return sum;
}
然后就是水仙花的判断,看各位数n次方的总和是不是等于它自身
m用来代替a做运算,并且最后m等于最高位,之后for循环让m变成m00..0,以此消掉a的最高位,最后再让m等于a(消掉了最高位)
public static void shuiXianHua(int a){
int i = 1;
while(i < a) {
if(powADD(i,weiShu(a)) == i){
System.out.println("这个数是:"+i);
System.out.println("它各位数"+weiShu(a)+"次方和是:"+powADD(i,weiShu(a)));
}
i++;
}
}
简单加个判断,就可以完成了