標準解法
#include
int main() {
int f[50];
f[0] = 1; f[1] = 1;
int i = 2;
while (1) {
f[i] = f[i-1] + f[i-2];
if (f[i] < 0 || f[i] > 1000000) break; // 防溢位
i++;
}
int len = i;
int m, n; scanf("%d %d", &m, &n);
if (m > n) { int t=m; m=n; n=t; } // 保證 m <= n
int first = 1;
for (int j = 0; j < len; j++) {
if (f[j] >= m && f[j] <= n) {
if (!first) printf(" ");
printf("%d", f[j]);
first = 0;
}
}
printf("\n");
return 0;
}
關鍵點總結
- 陣列大小 50 足夠覆蓋
int 範圍內所有費氏數 (第 46 項溢位)。
- 生成階段即檢測溢位 (
f[i] < 0) 與上界。
- 輸入可能
m > n,先交換。
- 輸出格式控制:首項無前導空格,項間單空格,末尾換行。