水仙花数即三位自幂数,每个位数上数字的3次幂之和等于数字它本身。例如:371 ,3的三次方、7的三次方和1的三次方之和等于371,。
类似的有一位自幂数,两位自幂数,四位自幂数…,大致思路为,一位自幂数为0 ~ 9之间的数,二位自幂数为10 ~ 99之间的某些数,三位自幂数为100 ~ 999之间的某些数…以此类推,有个整数有m位,可以得到最小数为Math.pow(10, m-1),一位次幂数最小数为0,最大数为Math.pow(10, m)-1,【Math.pow(x,y) x的y次幂】,在最小数与最大数之间遍历,当某数每位数的m次幂之和等于该数时,输出该数
function getArry(m){
let maxcount = Math.pow(10, m);
let minCount = m==1?0 : Math.pow(10, m-1);
let arry=[];
for(var i= minCount;i<maxcount;i++){
let count = 0;
for(var j=0;j < m;j++){
count += Math.pow(parseInt(i/Math.pow(10, m-j-1))%10,m)
}
if(count == i){
arry.push(i)
}
}
return arry;
}
getArry(3)
输出:[153, 370, 371, 407]
getArry(4)
输出:[1634, 8208, 9474]