三位數水仙花數:$abc = a^3 + b^3 + c^3$,其中 $a$ 為百位,$b$ 為十位,$c$ 為個位。
#include#include int main() { printf("水仙花數 (100-999): "); for (int n = 100; n <= 999; n++) { int a = n / 100; // 百位 int b = (n / 10) % 10; // 十位 int c = n % 10; // 個位 int sum = a*a*a + b*b*b + c*c*c; // 避免 pow 浮點誤差 if (sum == n) printf("%d ", n); } printf("\n"); return 0; }
水仙花數 (100-999): 153 370 371 407
void find_armstrong(int digits) {
int start = 1;
for (int i = 1; i < digits; i++) start *= 10;
int end = start * 10 - 1;
for (int n = start; n <= end; n++) {
int tmp = n, sum = 0;
while (tmp) {
int d = tmp % 10;
int p = 1;
for (int i = 0; i < digits; i++) p *= d;
sum += p;
tmp /= 10;
}
if (sum == n) printf("%d ", n);
}
}
水仙花數是經典迴圈與位數分解練習。關鍵技巧:`/100`、`/10%10`、`%10` 取三位數字,**整數乘法替代 `pow` 避免浮點誤差**。四個水仙花數:153, 370, 371, 407。