//fib22.c -- Fibonacci problem using Loop, by tsaiwn@cs.nctu.edu.tw //Please run under Dev-C++ #include #include long long fib(int n) { long long ans, f1, f2, i; if(n<0)return 0; if(n<2)return 1; f1 = f2 = 1; for(i=2; i<=n; ++i) { // 注意從 2 開始 ans = f1 + f2; f1 = f2; f2 = ans; } return ans; } /// void printFib(int i) { // 填滿一列再印出, 除非被要求一定印出 ( i <0 ) // 或是 i 為 10 倍數也會先印之前的再獨立印 fib(i) static char buf[88]={0}, tmp[88]; if(i<0) { printf("%s\n", buf); buf[0]=0; return; } if(i!=0 && (i%10 == 0) ) { if(strlen(buf)!=0) printf("%s\n", buf); buf[0] = 0; printf("Fib of %d=%I64d\n", i, fib(i)); return; } sprintf(tmp, "%I64d, ", fib(i)); if(strlen(buf) + strlen(tmp) > 78) { printf("%s\n", buf); buf[0] = 0; } strcat(buf, tmp); } int main( ) { int n, i; printf(" LONG_MAX==%ld\n", LONG_MAX); printf("0x7fffffffL==%ld\n", 0x7fffffffL); printf("n= "); scanf("%d", &n); for(i=0; i<=n; ++i) printFib(i); printFib(-1); // flush the result ! fprintf(stderr, "Hit Enter key.."); getchar( ); getchar( ); return 0; }