一、什么是水仙花數
水仙花數也稱為超完全數字不變數、自冪數、阿姆斯壯數、阿姆是特朗數。
水仙花數是指一個三位數,每個位數上數字的3次冪之和等於數字它本身。
水仙花數是自冪數的一種,三位的三次自冪數才叫做水仙花數;三位的水仙花數總夠有4個:153,370,371,470
二、通過JS取得水仙花數
思路分析:
1、使用for循環查找遍歷 從100到 999的所有三位數;
2、判斷遍歷的數字是否是各個位數的數字的3次冪數之和是否等於數字本身,如果是即為水仙花數,則在控制台輸出(如何選取各個位數)
(1)選取個位數 模以10,得到余數即為個位數
(2)選取十位數 i除以10,再對結果進行取整,取整后得到一個兩位數的整數。用這個結果對10取模,得到十位數
(3)選取百位數 三位數除以100,再取整,就得到了百位數。
3、使用 if語句 判斷 i 是否是水仙花數。Math對象用於執行數學任務,pow(x , y)函數用於求取 x 的 y 次冪。
1 for(var i = 100;i<=999;i++){ 2 var gw = i%10; 3 var sw = parseInt(i/10) % 10; 4 var bw = parseInt(i/100); 5 if(i == Math.pow(gw,3)+Math.pow(sw,3)+Math.pow(bw,3)){ 6 console.log(i); 7 } 8 }
輸出結果為:

三、求取其他的自冪數
- 一位自冪數:獨身數
- 兩位自冪數:沒有
- 三位自冪數:水仙花數
- 四位自冪數:四葉玫瑰數
- 五位自冪數:五角星數
- 六位自冪數:六合數
- 七位自冪數:北斗七星數
- 八位自冪數:八仙數
- 九位自冪數:九九重陽數
- 十位自冪數:十全十美數
1、四葉玫瑰數 (1634,8208,9474)
1 for(var i = 1000;i<=9999;i++){ 2 var gw = i%10; 3 var sw = parseInt(i/10)%10;
4 var bw = parseInt(i/100)%10;
5 var qw = parseInt(i/1000);
6 if(i == Math.pow(gw,4)+Math.pow(sw,4)+Math.pow(bw,4)+Math.pow(qw,4)){ 7 console.log(i);} 8 }

2、五角星數 (54748, 92727,93084)
console.time('五角星數'); for(var i = 10000;i<=99999;i++){ var gw = i%10; var sw = parseInt(i/10)%10;
var bw = parseInt(i/100)%10;
var qw = parseInt(i/1000)%10;
var ww = parseInt(i/10000);
if(i==Math.pow(gw,5)+Math.pow(sw,5)+Math.pow(bw,5)+Math.pow(qw,5)+Math.pow(ww,5)){ console.log(i);} } console.timeEnd('五角星數');

注意:這里面使用 console.time() 和 console.timeEnd() 來計算 運行的時間
console.time() 方法是作為計算器的起始方法,該方法一般用於測試程序執行的時長。
console.timeEnd() 方法為計算器的結束方法,並將執行時長顯示在控制台。
6、六合數(548834)
1 console.time('六合數'); 2 for(var i = 100000;i<=999999;i++){ 3 var gw = i%10; 4 var sw = parseInt(i/10)%10;
5 var bw = parseInt(i/100)%10;
6 var qw = parseInt(i/1000)%10;
7 var ww = parseInt(i/10000)%10;
8 var shw = parseInt(i/100000);
9 if(i==Math.pow(gw,6)+Math.pow(sw,6)+Math.pow(bw,6)+Math.pow(qw,6)+Math.pow(ww,6)+Math.pow(shw,6)){ 10 console.log(i);} 11 } 12 console.timeEnd('六合數');

7、北斗七星數(1741725,4210818,9800817,9926315)
console.time('北斗七星數'); for(var i = 1000000;i<=9999999;i++){ var gw = i%10; var sw = parseInt(i/10)%10;
var bw = parseInt(i/100)%10;
var qw = parseInt(i/1000)%10;
var ww = parseInt(i/10000)%10;
var sww = parseInt(i/100000)%10;
var qww = parseInt(i/1000000);
if(i==Math.pow(gw,7)+Math.pow(sw,7)+Math.pow(bw,7)+Math.pow(qw,7)+Math.pow(ww,7)+Math.pow(sww,7)+Math.pow(qww,7)){ console.log(i);} } console.timeEnd('北斗七星數');

8、八仙數(24678050,24678051,8859347)
1 console.time('八仙數'); 2 for(var i = 10000000;i<=99999999;i++){ 3 var gw = i%10; 4 var sw = parseInt(i/10)%10;
5 var bw = parseInt(i/100)%10;
6 var qw = parseInt(i/1000)%10;
7 var ww = parseInt(i/10000)%10;
8 var sww = parseInt(i/100000)%10;
9 var qww = parseInt(i/1000000)%10;
10 var www = parseInt(i/10000000);
11 if(i==Math.pow(gw,8)+Math.pow(sw,8)+Math.pow(bw,8)+Math.pow(qw,8)+Math.pow(ww,8)+Math.pow(sww,8)+Math.pow(qww,8)+Math.pow(www,8)){ 12 console.log(i);} 13 } 14 console.timeEnd('八仙數');

補充一些其他的Math對象:
- Math.pow(2,53) // => 9007199254740992: 2 的 53次冪
- Math.round(.6) // => 1.0: 四舍五入
- Math.ceil(.6) // => 1.0: 向上求整
- Math.floor(.6) // => 0.0: 向下求整
- Math.abs(-5)// => 5: 求絕對值
- Math.max(x,y,z) 返回最大值
- Math.min(x,y,z) 返回最小值
- Math.random() 生成一個大於等於0小於1.0的偽隨機數
- Math.PI // π: 圓周率
- Math.E // e: 自然對數的底數
- Math.sqrt(3) 3的平方根
- Math.pow(3, 1/3) 3的立方根
- Math.sin(0) 三角函數: 還有Math.cos, Math.atan等
- Math.log(10) 10的自然對數
- Math.log(100)/Math.LN10 以10為底100的對數
- Math.log(512)/Math.LN2 以2為底512的對數
- Math.exp(3) e的三次冪
通過JS來得到一系列的自冪數,是有一定的規律在里面的,有興趣的話可以動手嘗試一下,如果看了這篇博客能有所幫助的話,不勝榮幸~
