while (true){
var num=Number(prompt('请输入一个三位数'));
if(num<1000&num>=100){
var a=num%10; //个位数
var b=parseInt(num%100/10); //十位数
var c=parseInt(num/100); //百位数
}else {
alert('输入错误;');
continue;
}
if(num==a*a*a+b*b*b+c*c*c){
alert(num+"是水仙花数");
break;
}else {
alert(num+"不是是水仙花数");
break;
}
}
2、打印出所有的水仙花数
①我们已经知道了怎么去判断一个数是否是水仙花数,那么怎么去打印所有的水仙花数呢,第一个想到的一定是循环。
②既然水仙花数是一个三位数,那么我们只要把所有的三位数判断一下就可以了,话不多说,看代码:
document.write('水仙花数有:')
for(var num=100;num<1000;num++){
var a=num%10; //个位数
var b=parseInt(num%100/10); //十位数
var c=parseInt(num/100); //百位数
if(num==a*a*a+b*b*b+c*c*c){
document.write(num+',')
}
}
3、自幂数的算法,我们把水仙花数拓展一下,来做一做自幂数的算法;
①首先还是先了解一下什么是自幂数,自幂数是指一个 n 位正整数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153);
②水仙花数只是自幂数的一部分,从水仙花数拓展,判断一个数是否是自幂数,首先要判断它是一个几位数
③然后取到数的每一位,来进行判断,以1634为例,具体的请看代码注释:
while (true) {
var num = Number(prompt('请输入一个大于100的数'));
if (num >= 100 && parseFloat(num) == parseInt(num)) {
var i = 100;
var count = 0, sum = 0, a;
/*判断num是几位数*/
while (true) {
if (num / i >= 1) {
i *= 10;
count++; //count = 1;时,为3位数,2时为四位数; 以1634为例:count=2
} else {
i /= 10; //进到这里时num
break;
}
}
/*取到每一位并计算每位数几次幂之和*/
while (i >= 1) {
var b = 1;
a = parseInt(num % (i * 10) / i); //取到num的每一位, 取千位为 1634/1000取整; 百位:1634%1000/100取整 十位:1634%100/10取整 个位1634%10;
//百位和十位的规律都是 1634%(i*10)/i取整;同时对千位和个位进行试验,1634%10000=1634;1634%10/1;依旧成立
for (var j = 1; j <= count + 2; j++) {
b *= a; //根据位数,来决定每位数的几次幂
}
sum += b; //对每位数的几次幂进行求和;
i/=10; //更新循环变量取下一位
}
/*判断是否为自幂数*/
if (num == sum) {
alert(num + "是自幂数");
break;
} else {
alert(num + "不是是自幂数");
break;
}
} else {
alert('输入错误;');
continue;
}
}