您的位置:首页 > 其它

joj1277

2012-01-27 17:54 295 查看



1277: Fibonacci Freeze

ResultTIME LimitMEMORY LimitRun TimesAC TimesJUDGE

3s8192K2367561Standard
The Fibonacci numbers (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...) are defined by the recurrence:



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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: