-
阿姆斯特朗數
鎖定
阿姆斯特朗數(Armstrong number)是數學中的一個概念,多用於計算機語言編程。
- 中文名
- 阿姆斯特朗數
- 外文名
- Armstrong number
- 學 科
- 數學,計算機
- 適用領域
- 計算機語言編程
- >億的數
- 153 370 371 407
- 定 義
- n位正整數=各位數字n次方之和
- 分析方法
- 窮舉法
阿姆斯特朗數基本介紹
如果一個n位正整數等於其各位數字的n次方之和,則稱該數為阿姆斯特朗數。
例如1^3 + 5^3 + 3^3 = 153
當n=3時,又稱水仙花數,特指一種三位數,其各個數之立方和等於該數。
水仙花數共有4個,分別為:153、370、371、407。
阿姆斯特朗數阿姆斯特朗數表
位數 | - |
1 | 1, 2, 3, 4, 5, 6, 7, 8, 9 |
3 | 153, 370, 371, 407 |
4 | 1634, 8208, 9474 |
5 | 54748, 92727, 93084 |
6 | 548834 |
7 | 1741725, 4210818, 9800817, 9926315 |
8 | 24678050, 24678051, 88593477 |
9 | 146511208, 472335975, 534494836, 912985153 |
10 | 4679307774 |
11 | 32164049650, 32164049651, 40028394225, 42678290603, 44708635679, 49388550606, 82693916578, 94204591914 |
14 | 28116440335967 |
16 | 4338281769391370, 4338281769391371 |
17 | 21897142587612075, 35641594208964132, 35875699062250035 |
19 | 1517841543307505039, 3289582984443187032, 4498128791164624869, 4929273885928088826 |
20 | 63105425988599693916 |
21 | 128468643043731391252, 449177399146038697307 |
23 | 21887696841122916288858, 27879694893054074471405, 27907865009977052567814, 28361281321319229463398, 35452590104031691935943 |
24 | 174088005938065293023722, 188451485447897896036875, 239313664430041569350093 |
25 | 1550475334214501539088894, 1553242162893771850669378, 3706907995955475988644380, 3706907995955475988644381, 4422095118095899619457938 |
27 | 121204998563613372405438066, 121270696006801314328439376, 128851796696487777842012787, 174650464499531377631639254, 177265453171792792366489765 |
29 | 14607640612971980372614873089, 19008174136254279995012734740, 19008174136254279995012734741, 23866716435523975980390369295 |
31 | 1145037275765491025924292050346, 1927890457142960697580636236639, 2309092682616190307509695338915 |
32 | 17333509997782249308725103962772 |
33 | 186709961001538790100634132976990, 186709961001538790100634132976991 |
34 | 1122763285329372541592822900204593 |
35 | 12639369517103790328947807201478392, 12679937780272278566303885594196922 |
37 | 1219167219625434121569735803609966019 |
38 | 12815792078366059955099770545296129367 |
39 | 115132219018763992565095597973971522400, 115132219018763992565095597973971522401 |
Python編程語言實例
num = 0 while True: sum = 0 # 初始化和 n = len(str(num)) # 數值的位數 temp = num while temp > 0: digit = temp % 10 # 取num的個位數 sum += digit ** n # 個位數的位數次方加入和中 temp //= 10 # num整除10 回到循環頂部取十位數 以此類推 if num == sum: print(sum) num += 1
C語言實例
如果一個正整數等於其各個數字的n次方和,則稱該數為阿姆斯特朗數(亦稱為自戀性數)。
如 407=64+0+343就是一個阿姆斯特朗數。試編程求1000以內的所有阿姆斯特朗數。
*問題分析與算法設計
可採用窮舉法,依次取1000以內的各數(設為i),將i的各位數字分解後,據阿姆斯特朗數的性質進行計算和判斷。
*程序説明與註釋
#include int main() { int i,t,k,a[3]; printf("There are follwing armstrong number smaller than 1000:\n"); for(i=2;i<1000;i++) /*窮舉要判定的數i的取值範圍2~1000*/ { for(t=0,k=1000;k>=10;t++) /*截取整數i的各位(從高向低位)*/ { a[t]=(i%k)/(k/10); /*分別賦於a[0]~a[2}*/ k/=10; if(a[0]*a[0]*a[0]+a[1]*a[1]*a[1]+a[2]*a[2]*a[2]==i) /*判斷i是否為阿姆斯特朗數*/ printf("%5d",i); /*若滿足條件,則輸出*/ } } return 0; }
C++實例
本程序為int類型的阿姆斯特朗數
#include <bits/stdc++.h> int main() { int i,t,k,a[3]; printf("There are follwing armstrong number smaller than 1000:\n"); for(i=2;i<1000;i++) /*窮舉要判定的數i的取值範圍2~1000*/ { for(t=0,k=1000;k>=10;t++) /*截取整數i的各位(從高向低位)*/ { a[t]=(i%k)/(k/10); /*分別賦於a[0]~a[2}*/ k/=10; if(a[0]*a[0]*a[0]+a[1]*a[1]*a[1]+a[2]*a[2]*a[2]==i) /*判斷i是否為阿姆斯特朗數*/ printf("%5d",i); /*若滿足條件,則輸出*/ } } return 0; }
C#實例
以下才是1000000000以內的阿姆斯特朗數
private void btnSearch_Click(object sender, EventArgs e) { int i = 101; int j = 1; while ((long)i < 1000000000) { if (i < Math.Pow(10,(j+2))) { if ((int)Getresult(i, j) == i) { txtResult.Text += i.ToString() + Environment.NewLine; } } else { j++; } i++; } } private static int Getresult(int i, int j) { int result = 0; for (int x = 0; x < i.ToString().Length; x++) { int te = Convert.ToInt32(i.ToString().Substring(x, 1)); result+=(int)(Math.Pow(te, (j + 2))); } return result; }
Java實例
public class Armstrong { public static void main(String[ ] args) { for (int i = 1 ; i <=1000 ;i++ ) { int j = i; int a,b,c; a=j%10; j=j/10; b=j%10; j=j/10; c=j%10; if (i == a*a*a+b*b*b+c*c*c) System.out.println(i); } } }
JavaScript實例
求num以內的所有數
var num = 999999999; for (var i = 100; i <= num i++) { var s = i.toString(); var count = 0; for (var j = 0; j < s.length; j++) count += Math.pow(parseInt(s[j]), s.length); if (count == i) { console.log("find number:" + i); } }
- 參考資料
-
- 1. Narcissistic Number .Wolfram MathWorld[引用日期2020-04-03]
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:43次歷史版本
- 最近更新: 胡说Y道