Sunday, February 27, 2011

495 - Fibonacci Freeze


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 5005
char fib[M][1100];
void strRev(char[]);
int longAdd(char[],char[],char[]);
int main()
{
    register int n,i,j;
    //freopen("in.txt","r",stdin);
    strcpy(fib[0],"0");
    strcpy(fib[1],"1");
    strcpy(fib[2],"1");
    for(i=3;i<M;i++)
        longAdd(fib[i],fib[i-2],fib[i-1]);

    while(scanf("%d",&n)==1)
        printf("The Fibonacci number for %d is %s\n",n,fib[n]);
    exit(0);
}
int longAdd(char f[],char f1[],char f2[])
{
    int i,a,b,c=0;
    for(i=0;f1[i]||f2[i];i++)
    {
        a=(f1[i])?f1[i]-48:0;
        b=(f2[i])?f2[i]-48:0;
        f[i]=(a+b+c)%10+48;
        c=(a+b+c)/10;
    }
    if(c)f[i]=c+48;
    strRev(f1);
    return 0;
}
void strRev(char str[])
{
    int i,len=strlen(str),n=len/2;
    for(i=0;i<n;i++)
    {
        str[i]=str[i]^str[len-i-1];   
        str[len-i-1]=str[i]^str[len-i-1];
        str[i]=str[i]^str[len-i-1];
    }
}

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.