js算法集合(一) 水仙花数 及拓展(自幂数的判断)
js算法集合(一)
最近有些朋友跟我说对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<i,除以10跟num同位数;  以1634为例:i=1000
                         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;
             }
         }
本次分享就到这里
谢谢大家的观看
希望能对大家有所启发
有更好的方法或不同的意见请在留言区跟我交流
js算法集合(一) 水仙花数 及拓展(自幂数的判断)的更多相关文章
- js算法集合(二) javascript实现斐波那契数列   (兔子数列)
		
js算法集合(二) 斐波那契数列 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列进行研究,来加深对循环的理解. Javascript实 ...
 - ALGO-147_蓝桥杯_算法训练_4-3水仙花数
		
问题描述 打印所有100至999之间的水仙花数.所谓水仙花数是指满足其各位数字立方和为该数字本身的整数,例如 =^+^+^. 样例输入 一个满足题目要求的输入范例. 例: 无 样例输出 xxx xxx ...
 - JS 1000以内的水仙花数   (三位数  各个数字的立方和等于本身   例如   1*1*1 + 5*5*5 + 7*7*7  = 157)
		
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
 - 蓝桥杯 算法训练 ALGO-147 4-3水仙花数
		
算法训练 4-3水仙花数 时间限制:1.0s 内存限制:256.0MB 问题描述 打印所有100至999之间的水仙花数.所谓水仙花数是指满足其各位数字立方和为该数字本身的整数,例如 153=1 ...
 - Tips_of_JS 之 利用JS实现水仙花数的寻找与实现斐波那契数列
		
一.水仙花数 1.啥是水仙花数? 水仙花数是指一个 n 位正整数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1^3 + 5^3+ 3^3 = 153) 2.利用JS实现对水 ...
 - 算法之水仙花数(Java语言)
		
概述 在数论中,水仙花数(Narcissistic number),也被称为超完全数字不变数(pluperfect digital invariant, PPDI).自恋数.自幂数.阿姆斯壮数或阿姆斯 ...
 - 用js写水仙花数
		
...js //输入一个三位数,水仙花数就是个位的三次方+十为的三次方+百位的三次方之和等于本身 console.log('请输入一个三位数:'); let a = readline.questi ...
 - 使用js输出1000以内的水仙花数
		
什么是水仙花数 水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI).自恋数.自幂数.阿姆斯壮数或阿姆斯特 ...
 - js查找水仙花数
		
所谓水仙花数是满足类似于153=1³+5³+3³: 第一种方式:把这个数当做字符串来实现 <script> for(var i=100;i<=999;i++) { str_i=i.t ...
 
随机推荐
- css基本布局
			
一.一列布局 关键代码: { width:960; margin:0 auto: } 代码: 运行结果: 分析:以上代码实现一列布局,头部占整个浏览器 ...
 - mybatis generator 插件安装及使用
			
现在Mybatis特别火,但是在开发中却要经常写实体类和配置文件,会不会特别烦人,所以可以利用Mybatis的代码生成插件来生成这部分代码: 1,打开eclipse,点击Help>Softwar ...
 - devcpp中很简单的排序
			
之前学的东西,不知什么缺了,什么没缺,索性重头开始弄,用的是<啊哈!算法>. 排序很简单,小的可以选择死磕.直接贴一份代码. #include<iostream> #inclu ...
 - loadrunner提高篇-block(块)技术和参数化
			
Block(块)技术 block(块)技术是应用于在一个脚本中实现不同事务.不同次数循环或不同百分比循环的情况.比如在一个脚本中,登录执行3次,查询执行1次. 使用方法如下: 1.录制一个脚本,包含2 ...
 - 老李推荐:第14章1节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-面向控件编程VS面向坐标编程
			
老李推荐:第14章1节<MonkeyRunner源码剖析> HierarchyViewer实现原理-面向控件编程VS面向坐标编程 poptest是国内唯一一家培养测试开发工程师的培训机 ...
 - Android -- 贝塞尔二阶实现饿了么加入购物车效果
			
1,上周我们实现了简单的三阶贝塞尔曲线效果实例,今天是使用二阶贝塞尔曲线加动画实现的加入购物车效果,在码代码过程中出现了些问题,过一下和大家来探讨探讨,先看一下效果图 2,从上面的效果来看我们基本上可 ...
 - Java面试题04-final关键字详解
			
Java面试题04-final关键字详解 本篇博客将会讨论java中final关键字的含义,以及final用在什么地方,感觉看书总会有一些模糊,而且解释的不是很清楚,在此做个总结,以备准备面试的时候查 ...
 - 关于 this对象 指向问题
			
this 定义:this是包含它的函数作为方法被调用时所属的对象.(1,this所在的函数.2,此函数作为方法被调用.3,this等于调用此函数的对象) this 对象在运行时基于函数的执行环境绑定的 ...
 - 关于css禁止文本复制属性
			
最近在做DHTMLX框架替换,新框架dhx的grid是不能选中内容复制的 虽然相对来说是安全些的,但是客户体验度一定会大打折扣 网页上禁止复制主要靠JavaScript来实现.<BODY onc ...
 - redis 压缩链表
			
redis 压缩链表 概述 压缩链表是相对于普通链表而言的 当普通链表的数据越来越多, 链表查询性能会低效 当存储的数据较少时, 使用链表存储会浪费空间 压缩链表本质上是一个字符串 压缩链表内存储的数 ...