joj1277
2012-01-27 17:54
295 查看
1277: Fibonacci Freeze
Result | TIME Limit | MEMORY Limit | Run Times | AC Times | JUDGE |
---|---|---|---|---|---|
3s | 8192K | 2367 | 561 | Standard |
Write a program to calculate the Fibonacci Numbers.
Input and Output
The input to your program would be a sequence of numbers smaller or equal than 500, each on a separate line, specifying which Fibonacci number to calculate.Your program should output the Fibonacci number for each input value, one per line.
Sample Input
5 7 11
Sample Output
The Fibonacci number for 5 is 5 The Fibonacci number for 7 is 13 The Fibonacci number for 11 is 89
This problem is used for contest: 111
Submit / Problem List / Status / Discuss
由于要求500项斐波那契数列,用到大数加法。直接在递推写斐波那契数列的程序中将其中的加法替换。
#include <stdio.h> #include <string.h> void add(char *a, char *b, char *c) { int i, j, i1, i2, tmp, carry; int len1 = strlen(a); int len2 = strlen(b); char ch; i1 = len1-1; i2 = len2-1; j = carry = 0; for ( ; i1>=0 && i2>=0; --i1, --i2, ++j) { tmp = a[i1]-'0'+b[i2]-'0'+carry; carry = tmp / 10; c[j] = tmp % 10 + '0'; } while (i1 >= 0) { tmp = a[i1--] - '0' + carry; carry = tmp / 10; c[j++] = tmp % 10 + '0'; } while (i2 >= 0) { tmp = b[i2--] - '0' + carry; carry = tmp / 10; c[j++] = tmp % 10 + '0'; } if (carry != 0) { c[j++] = carry + '0'; } c[j] = '\0'; for (i=0, --j; i<j; ++i, --j) { ch = c[i]; c[i] = c[j]; c[j] = ch; } a[i1] = '\0'; b[i2] = '\0'; } int main(void) { int val; char a[1000], b[1000], c[1000]; while (scanf("%d", &val) == 1) { a[0] = '0'; a[1] = '\0'; b[0] = '1'; b[1] = '\0'; if (0 == val) { c[0] = '0'; c[1] = '\0'; } else if (1 == val) { c[0] = '1'; c[1] = '\0'; } else { for (int i=2; i<=val; i++) { add(a, b, c); strcpy(a, b); strcpy(b, c); } } printf("The Fibonacci number for %d is %s\n", val, c); } return 0; }
相关文章推荐
- JOJ 2391 words
- JOJ 1106 Complicated Expressions
- JOJ 1064: Caeser Comes Back 解题报告
- joj 1107: Factorial
- 忘了是joj第几题了 剩余定理
- joj2660
- joj 2693
- joj 2443
- joj 2223: A Bug's Life (ws版的并查集)
- Exponentiation(poj能通过,joj不能)
- joj 1003
- joj 2653 不同的数 从2*n中找出不相同的两个数
- joj1873
- joj1751
- joj2529
- joj 1171
- joj 2660 河床
- joj 1877
- joj1483 Exponentiation
- hdu 1277 全文检索