所謂 Armstrong number 指的是一個 n 位數的整數,它的所有位數的 n 次方和恰好等於自己。
如;1634 = 14 + 64 + 34 + 44
請依題目需求在一定範圍內找出該範圍內的所有 armstrong numbers.
輸入
輸入包含兩個數字 n, m(n<m, n>0, m<=1000000),代表所有尋找 armstrong number 的範圍
100 999 10 99
輸出
將所有範圍內的 armstrong number 依序由小到大輸出,如果沒有找到請輸出 none.
153 370 371 407 none
解題思路
先建好阿姆斯壯數表,之後用建好的表快速進行判斷。
完整程式碼
AC (23ms, 80KB)
#include<stdio.h>
int n, m , arms[20], aLen; char hasAns;
inlineintpow(int src, int p) { int res = src; while (--p) res *= src; return res; }
voidSetArmsList() { int now = 0, tmp[6], i, j, k, sum; for (i = 1; i < 1000000; i++) { now = i, j = k = sum = 0; for (; now; j++, now /= 10) tmp[j] = now % 10; for (; k < j; k++) sum += pow(tmp[k], j); if (sum == i) arms[aLen++] = i; } }
intmain() { SetArmsList(); while (scanf(" %d %d", &n, &m) == 2) { hasAns = 0; for (int i = 0; i < aLen && arms[i] <= m; i++) { if (arms[i] >= n) printf("%d ", arms[i]) , hasAns = 1; } if (hasAns) putchar('\n'); else puts("none"); } return0; }