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

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是否成立,成立打印出来。我们先写一个判断水仙花数的代码:

      

 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         }

  2、打印出所有的水仙花数   

    ①我们已经知道了怎么去判断一个数是否是水仙花数,那么怎么去打印所有的水仙花数呢,第一个想到的一定是循环。

    ②既然水仙花数是一个三位数,那么我们只要把所有的三位数判断一下就可以了,话不多说,看代码:

    

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         }

  3、自幂数的算法,我们把水仙花数拓展一下,来做一做自幂数的算法;

    ①首先还是先了解一下什么是自幂数,自幂数是指一个 n 位正整数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3+ 3^3 = 153);

    ②水仙花数只是自幂数的一部分,从水仙花数拓展,判断一个数是否是自幂数,首先要判断它是一个几位数

    ③然后取到数的每一位,来进行判断,以1634为例,具体的请看代码注释:

 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         }

   

本次分享就到这里

谢谢大家的观看

觉得不错请点赞

希望能对大家有所启发

有更好的方法或不同的意见请在留言区跟我交流

  

时间: 2024-12-26 18:29:48

js算法集合(一) 水仙花数 及拓展(自幂数的判断)的相关文章

js算法集合(二) javascript实现斐波那契数列 (兔子数列) Javascript实现杨辉三角

js算法集合(二)  斐波那契数列.杨辉三角 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列和杨辉三角进行研究,来加深对Javascript的理解. 一.Javascript实现斐波那契数列 ①要用Javascript实现斐波那契数列,我们首先要了解什么是斐波那契数列:斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为

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

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> </body> </html> <script type="text/javascript"> for(i=100;i<1000;i++){ var a = par

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

算法训练 4-3水仙花数 时间限制:1.0s   内存限制:256.0MB 问题描述 打印所有100至999之间的水仙花数.所谓水仙花数是指满足其各位数字立方和为该数字本身的整数,例如 153=1^3+5^3+3^3. 样例输入 一个满足题目要求的输入范例.例:无 样例输出 153xxxxxx 题目解析: 这是一道简单的暴力破解的题目.只需分解出每个三位数的百位.十位和个位,然后计算其三次方是否等于该数即可. 示例代码: 1 public class Main { 2 public static

JS基础练习:奇偶数、质数、闰年、水仙花数、完美数、累加、累乘、多位数拆分等

2018年8月1日       广州 这几天学习JS基础的运算符和语句,经常写到一些经典的例子,这里记录下. 很多数学概念不懂,就想不出算法,也就写不出来.所以也算对特殊的数学概念作个了解吧. 一.数值奇偶性的判断 概念:一个整数能被2整除的是偶数,不能被2整除的是奇数. 代码示例: 1 <script> 2 var num = parseInt(prompt("请任意输入一个整数:")); 3 if (num === 0 ) { 4 console.log("0

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

概述 在数论中,水仙花数(Narcissistic number),也被称为超完全数字不变数(pluperfect digital invariant, PPDI).自恋数.自幂数.阿姆斯壮数或阿姆斯特朗数(Armstrong number) ,用来描述一个N位非负整数,其各位数字的N次方和等于该数本身. 举例 例如153.370.371及407就是三位超完全数字不变数,其各个数之立方和等于该数: 153 = 13 + 53 + 33. 370 = 33 + 73 + 03. 371 = 33 

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

一.水仙花数 1.啥是水仙花数? 水仙花数是指一个 n 位正整数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1^3 + 5^3+ 3^3 = 153) 2.利用JS实现对水仙花数的寻找. 这一次我们寻找水仙花数的方法,是JS中非常基础的while循环.代码如下: si不si很神奇~ 二.斐波那契数列 1.啥是斐波那契数列? 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔

JS水仙花数

水仙花数即:a3+b3+c3=abc.当然还有玫瑰花数,五角星数等一些有规律的数学算法 <script> for (var i = 100; i < 1000; i++) { var bws = Math.floor(i / 100);//获取百位数 var sws = Math.floor(( i - bws * 100 ) / 10);//获取十位数 var gws = i % 10;//获取个位数 //Math.pow(bws, 3)百位数的3次幂,Math.pow(sws, 3)

js水仙花数,闰年,最大公约数

1.水仙花数题目: 打印1000以内所有水仙花数1* 水仙花数是指一个三位数,各位数的立方和等于这个数本身,例如153 = 1*1*1+5*5*5+3*3*3 思路:1.首先要确定这是一个循环,次数是确定的,选择for循环,每一次都需要判断,for循环里面要嵌套一个if判断 2.要用三个变量存储,百位,十位,个位(这个题的重点就是获取这三位数) 百位 :391 /100 = 3.91;这里需要一个处理,把小数后面的全部舍去,我用js写的,parseInt(储存百位的变量)这个方法就可以换取整数,

js 实现 水仙花数

水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身.(例如:1^3 + 5^3+ 3^3 = 153) <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title><script type="text/javascript"> /