html语言判断水仙花数,js算法集合(一) 水仙花数 及拓展(自幂数的判断)...

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;

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值