三位數中,各位數字立方和等於該數本身。例如:$153 = 1^3 + 5^3 + 3^3$。典型水仙花數共有 4 個:153、370、371、407。
給定三位數 `n`(100~999):
#include
#include
int is_narcissistic(int n) {
int a = n / 100;
int b = (n / 10) % 10;
int c = n % 10;
return (a*a*a + b*b*b + c*c*c) == n;
}
int main() {
printf("水仙花數有:\n");
for (int i = 100; i < 1000; i++) {
if (is_narcissistic(i)) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
若要求任意位數,需動態提取每位數字:
bool is_narcissistic_general(int n) {
int original = n;
int digits[10], len = 0;
while (n > 0) {
digits[len++] = n % 10;
n /= 10;
}
long long sum = 0;
for (int i = 0; i < len; i++) {
sum += pow(digits[i], len);
}
return sum == original;
}
水仙花數問題核心考察整數拆位技巧(除 10 取商、模 10 取餘)與循環邊界控制。掌握 `n/100`、`(n/10)%10`、`n%10` 這三個公式,即可輕松解決所有固定位數的數字拆解問題。