js算法集合(一)

最近有些朋友跟我说对js中的一些算法感到很迷惑,知道这个算法到底是怎么回事,但是就是不会用代码把它写出来,这里我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,希望能对大家有所帮助。

   
  1、验证一个数是否为水仙花数
    ①要写水仙花数的算法,我们首先来了解一下什么是水仙花数,水仙花数是指一个 3位正整数 ,它的每个位上的数字的 3次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153);
    ②了解了什么是水仙花数我们就开始分析该怎么下手。通过定义来看我们首先要把每一位数都取出来,然后通过验证等式是否成立来找出水仙花数;
    ③那么怎么去取到一个三位数的每一位呢,很简单,还是拿153来做例子吧,153%10取余为1将个位取出来,然后153%100取余,然后除以10取整,获得十位,153/100取整获得百位数;
    ④拿到了三位数怎么去判断呢,通过if判断语句来判断1^3 + 5^3+ 3^3 = 153是否成立,成立打印出来。我们先写一个判断水仙花数的代码:
      

         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算法集合(一) 水仙花数 及拓展(自幂数的判断)的更多相关文章

  1. js算法集合(二) javascript实现斐波那契数列 (兔子数列)

    js算法集合(二)  斐波那契数列 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列进行研究,来加深对循环的理解.     Javascript实 ...

  2. ALGO-147_蓝桥杯_算法训练_4-3水仙花数

    问题描述 打印所有100至999之间的水仙花数.所谓水仙花数是指满足其各位数字立方和为该数字本身的整数,例如 =^+^+^. 样例输入 一个满足题目要求的输入范例. 例: 无 样例输出 xxx xxx ...

  3. JS 1000以内的水仙花数 (三位数 各个数字的立方和等于本身 例如 1*1*1 + 5*5*5 + 7*7*7 = 157)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 蓝桥杯 算法训练 ALGO-147 4-3水仙花数

    算法训练 4-3水仙花数   时间限制:1.0s   内存限制:256.0MB 问题描述 打印所有100至999之间的水仙花数.所谓水仙花数是指满足其各位数字立方和为该数字本身的整数,例如 153=1 ...

  5. Tips_of_JS 之 利用JS实现水仙花数的寻找与实现斐波那契数列

    一.水仙花数 1.啥是水仙花数? 水仙花数是指一个 n 位正整数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1^3 + 5^3+ 3^3 = 153) 2.利用JS实现对水 ...

  6. 算法之水仙花数(Java语言)

    概述 在数论中,水仙花数(Narcissistic number),也被称为超完全数字不变数(pluperfect digital invariant, PPDI).自恋数.自幂数.阿姆斯壮数或阿姆斯 ...

  7. 用js写水仙花数

    ...js   //输入一个三位数,水仙花数就是个位的三次方+十为的三次方+百位的三次方之和等于本身 console.log('请输入一个三位数:'); let a = readline.questi ...

  8. 使用js输出1000以内的水仙花数

    什么是水仙花数 水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI).自恋数.自幂数.阿姆斯壮数或阿姆斯特 ...

  9. js查找水仙花数

    所谓水仙花数是满足类似于153=1³+5³+3³: 第一种方式:把这个数当做字符串来实现 <script> for(var i=100;i<=999;i++) { str_i=i.t ...

随机推荐

  1. Sublime Text3 编辑器我的最爱

    简介 Sublime Text 3是一个神奇的文本编辑器,适合程序员.作家.它有很多亮点功能,比如多选择.Go Anything.命令面板.多选择可以让你同时编辑多出代码,Got Anything 像 ...

  2. YII2.0 ——安装yii2项目

    有两种安装方式 第一种:使用composer进行安装 composer global require"fxp/composer-asset-plugin:^1.2.0" compo ...

  3. React中使用CSSTransitionGroup插件实现轮播图

    动画效果,是一个页面上必不可少的功能,学习一个新的东西,当然就要学习,如何用新的东西,用它的方法去实现以前的东西啦.今天呢,我就在这里介绍一个试用react-addons-css-transition ...

  4. [Python]获取子线程异常信息

    起因 今天在写东西的时候,用到了多线程.遇到了个问题: 子线程的异常,在父线程中无法捕获. 解决 问题代码 问题代码示例代码如下: import threading class SampleThrea ...

  5. JS——操作内容、操作相关元素

    操作内容:普通元素.innerHTML = "值": 会把标记执行渲染普通元素.innerText = "值": 将值原封不动的展示出来,即使里面有标记 var ...

  6. JS——函数、事件

    1.函数字符串函数 var s=new string(); var ss="hello world"; var sss=""HELLO, WORLD" ...

  7. SQL Server 备份所有数据库代码

    今天让我备份一下网上所有数据库,猛地一看,几百个呢, 坑爹呢,只好网上找找有没有简便的,没想到还真有 记下来,以后好用,哈哈... use master declare @DbName varchar ...

  8. 老李分享:robotium3.6与4.0 later 的区别 1

    老李分享:robotium3.6与4.0 later 的区别   因为下载的直接是最新版本的robotium4.1版,这次碰到gridView问题时,发现网上有getCurrentListViews( ...

  9. 管中窥豹——从对象的生命周期梳理JVM内存结构、GC调优、类加载、AOP编程及性能监控

    如题,本文的宗旨既是透过对象的生命周期,来梳理JVM内存结构及GC相关知识,并辅以AOP及双亲委派机制原理,学习不仅仅是海绵式的吸收学习,还需要自己去分析why,加深对技术的理解和认知,祝大家早日走上 ...

  10. Masonry适配的简单使用

    一.Masonry是什么: 答:是一个很好的三方,用来做适配的 二.怎么使用Masonry 1.先导入头文件 #define MAS_SHORTHAND #define MAS_SHORTHAND_G ...