2016/02/25

【說明】認識阿姆斯壯數 (Armstrong Number)

它又名為自戀數、水仙花數、阿姆斯特朗數、自冪數、阿姆姆撞樹,是指一個正整數所有位數N次方的和剛好等於自己,不只十進制有阿姆斯壯數其他進制也可以找到。

如下圖,153的每個位數1、5、3的3次方的和剛好等於153,所以153是阿姆斯壯數,其他數以此類推。

口決:自己數字的次方和等於自己

以下是找十進制阿姆斯壯數的程式碼
用法:
Q = getAmsNum(a, b, ams[])
// Q為阿姆斯壯數的數量
// a、b 為搜尋的範圍,a < b
// ams[] 儲存阿姆斯壯數的陣列

Java
static int getAmsNum(int a, int b, int[] ams){ //a ~ b 的阿姆斯壯數,存在ams[],並回傳阿姆斯壯數數量
  int f = 0; //數量
  for (int i = a; i <= b; i++){
   int n = (int)Math.log10(i) + 1,sum = 0;//n位數
   String s = String.valueOf(i);
   for(int j = 1; j <= n; j++){
    sum += Math.pow(Integer.valueOf(s.substring(j-1, j)), n);//每個數字次方後相加
   }
   if (i == sum){
    ams[f] = i;//如果是阿姆斯壯數就放入陣列
    f++;
   }
  }
  return f;
 }


C
int getAmsNum(int a, int b, int AmsNum[]){
 int f = 0,i,num=0; //有無阿姆斯壯數
 for (i = a; i <= b; i++){
  int n = (int)log10(i)+1,temp = i,sum = 0;
  while(temp != 0){
   sum += pow((temp%10),n);
   temp /= 10;
     }
  if ( i == sum){
   num++;
   AmsNum[num]=i;
   f = 1;
     }
 }
 return f;
}



如有錯誤,歡迎留言指教。

沒有留言:

張貼留言