三位數水仙花數:abc = a³ + b³ + c³,其中 a∈[1,9], b,c∈[0,9]。已知解:153、370、371、407。
#include
int main() {
for (int n = 100; n < 1000; n++) {
int a = n / 100; // 百位
int b = n / 10 % 10; // 十位
int c = n % 10; // 個位
if (a*a*a + b*b*b + c*c*c == n)
printf("%d ", n);
}
printf("\n");
return 0;
}
int cube[10];
for (int i = 0; i < 10; i++) cube[i] = i*i*i;
for (int n = 100; n < 1000; n++) {
int a = n/100, b = n/10%10, c = n%10;
if (cube[a] + cube[b] + cube[c] == n)
printf("%d ", n);
}
for (int a = 1; a <= 9; a++) {
for (int b = 0; b <= 9; b++) {
for (int c = 0; c <= 9; c++) {
int sum = a*a*a + b*b*b + c*c*c;
if (sum == a*100 + b*10 + c)
printf("%d ", sum);
}
}
}
| 方法 | 迭代次數 | 運算特點 | 推薦場景 |
|---|---|---|---|
| 位分解 | 900 | 含除法取模,直觀易懂 | 教學、面試 |
| 立方表 | 900 | 查表替代乘法,微優化 | 嵌入式無乘法器 |
| 三重循環 | 900 | 無除法,直接構造數字 | 算法思維訓練 |
bool is_armstrong(int n) {
int original = n, digits = 0, sum = 0;
int temp = n;
while (temp) { digits++; temp /= 10; }
temp = n;
while (temp) {
int d = temp % 10;
int p = 1; for (int i=0;i
水仙花數是經典的數位 DP / 枚舉入門題,關鍵在於位分解技巧與邊界條件控制。