複製鏈接
請複製以下鏈接發送給好友

阿姆斯特朗數

鎖定
阿姆斯特朗數(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。

阿姆斯特朗數阿姆斯特朗數表

1040以內的阿姆斯特朗數表 [1] 
位數
-
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);
}
}
參考資料