#include<stdio.h>
#define MAX 5001
int main(int argc, const char * argv[]) {
int n, i, j, k;
int ans[MAX][3001] = {0};
ans[0][3000] = 0;
ans[1][3000] = 1;
for (i = 2; i <= MAX-1; i++) {
for (j = 3000; j >= 0; j--) {
ans[i][j] = ans[i-1][j] + ans[i-2][j];
}
for (j = 3000; j >= 1; j--) {
if (ans[i][j] >= 10) {
ans[i][j-1] += ans[i][j]/10;
ans[i][j] %= 10;
}
}
}
while (scanf("%d", &n) != EOF) {
printf("The Fibonacci number for %d is ", n);
if (n == 0) {
printf("0\n");
}
else {
for (k = 0; ans[n][k] == 0; k++);
for (j = k; j <= 3000; j++) {
printf("%d", ans[n][j]);
}
printf("\n");
}
}
return 0;
}
此code在UVa可Accepted,但在電腦上執行,可能會出現EXC_BAD_ACCESS的error
理由是電腦沒辦法分配出太大的連續記憶體(5001*3001*4 bytes)
解決方法應該是使用動態配置
沒有留言:
張貼留言