#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) 解決方法應該是使用動態配置
沒有留言:
張貼留言