js算法集合(一)web
最近有些朋友跟我说对js中的一些算法感到很迷惑,知道这个算法究竟是怎么回事,可是就是不会用代码把它写出来,这里我跟你们分享一下作水仙花数的算法的思路,并对其扩展到自幂数的算法,但愿能对你们有所帮助。算法
1 while (true){ 2 var num=Number(prompt('请输入一个三位数')); 3 if(num<1000&num>=100){ 4 var a=num%10; //个位数 5 var b=parseInt(num%100/10); //十位数 6 var c=parseInt(num/100); //百位数 7 }else { 8 alert('输入错误;'); 9 continue; 10 } 11 if(num==a*a*a+b*b*b+c*c*c){ 12 alert(num+"是水仙花数"); 13 break; 14 }else { 15 alert(num+"不是是水仙花数"); 16 break; 17 } 18 }
二、打印出全部的水仙花数 spa
①咱们已经知道了怎么去判断一个数是不是水仙花数,那么怎么去打印全部的水仙花数呢,第一个想到的必定是循环。3d
②既然水仙花数是一个三位数,那么咱们只要把全部的三位数判断一下就能够了,话很少说,看代码:code
1 document.write('水仙花数有:') 2 for(var num=100;num<1000;num++){ 3 var a=num%10; //个位数 4 var b=parseInt(num%100/10); //十位数 5 var c=parseInt(num/100); //百位数 6 if(num==a*a*a+b*b*b+c*c*c){ 7 document.write(num+',') 8 } 9 }
三、自幂数的算法,咱们把水仙花数拓展一下,来作一作自幂数的算法;orm
①首先仍是先了解一下什么是自幂数,自幂数是指一个 n 位正整数 ( n≥3 ),它的每一个位上的数字的 n 次幂之和等于它自己。(例如:1^3 + 5^3+ 3^3 = 153);blog
②水仙花数只是自幂数的一部分,从水仙花数拓展,判断一个数是不是自幂数,首先要判断它是一个几位数it
③而后取到数的每一位,来进行判断,以1634为例,具体的请看代码注释:table
1 while (true) { 2 var num = Number(prompt('请输入一个大于100的数')); 3 if (num >= 100 && parseFloat(num) == parseInt(num)) { 4 var i = 100; 5 var count = 0, sum = 0, a; 6 /*判断num是几位数*/ 7 while (true) { 8 if (num / i >= 1) { 9 i *= 10; 10 count++; //count = 1;时,为3位数,2时为四位数; 以1634为例:count=2 11 } else { 12 i /= 10; //进到这里时num<i,除以10跟num同位数; 以1634为例:i=1000 13 break; 14 } 15 }
/*取到每一位并计算每位数几回幂之和*/ 16 while (i >= 1) { 17 var b = 1; 18 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;依旧成立 19 for (var j = 1; j <= count + 2; j++) { 20 b *= a; //根据位数,来决定每位数的几回幂 21 } 22 sum += b; //对每位数的几回幂进行求和; 23 i/=10; //更新循环变量取下一位 24 }
/*判断是否为自幂数*/ 25 if (num == sum) { 26 alert(num + "是自幂数"); 27 break; 28 } else { 29 alert(num + "不是是自幂数"); 30 break; 31 } 32 } else { 33 alert('输入错误;'); 34 continue; 35 } 36 }
本次分享就到这里form
谢谢你们的观看
但愿能对你们有所启发
有更好的方法或不一样的意见请在留言区跟我交流