FIBON高精度

#include<stdio.h>
#include<string.h>
int u,n;
char a[1005],b[1005],h[1005];
int x[1005],y[1005],z[1005];
int main()
{
    char s(char t[],char o[]);
    int p,q,i;
    while(scanf("%d",&n,n!=0))
    {
    for(i=0;i<=1005;i++)
    {
    a[i]=b[i]=h[i]='';
    x[i]=y[i]=z[i]=0;
    } 
    a[0]='1';
    b[0]='1';
    if(n==1||n==2)
    {
    printf("1
");
    continue;
    } 
    for(u=2;u<=n-1;u++)
    {
    s(a,b);
    strcpy(a,b);
    strcpy(b,h);
    }
    } 
}
char s(char t[],char o[])
{
    int M,N,k,i,j;
    memset(z,0,sizeof(z));
    M=strlen(t);
    N=strlen(o);
    for(i=0;i<M;i++)
    x[i]=a[M-i-1]-'0';
    for(i=0;i<N;i++)
    y[i]=b[N-i-1]-'0';
    if(M>N)
    k=M;
    else
    k=N;
    for(i=0;i<=k;i++)
    {
        z[i]=x[i]+y[i]+z[i];
        if(z[i]>9)
        {
            z[i+1]++;
            z[i]=z[i]%10;
        }
    }
    j=k;
    while(z[j]==0)
    j--;
    for(i=0;j>=0;j--)
    {
    h[i]=z[j]+'0';
    i++;
    }
    if(u==n-1)
    for(;j>=0;j--)
    printf("%d",z[j]);
}
原文地址:https://www.cnblogs.com/Leozi/p/10835030.html