hdu 1715

本文介绍了一种使用C语言实现大数运算的方法,以计算斐波那契数列为例,展示了如何处理超出基本数据类型范围的大整数加法运算。通过字符串模拟数组操作,实现了大数相加的功能,并以此递推生成斐波那契数列。

http://acm.hdu.edu.cn/showproblem.php?pid=1715
没有什么特别之处 不过因为看错题目 wa 几次了

#include  < stdio.h >
#include  < string .h >
#include  < stdlib.h >
const   int  maxn  =   2000 ;
char  back[maxn];
char  Fibonacci[ 1000 ][maxn];
void  add( char  a[], char  b[], char  back[])
{
     int  i,j,k,up,x,y,z,l;
     char   * c;
     if  (strlen(a) > strlen(b)) l = strlen(a) + 2 ;  else  l = strlen(b) + 2 ;
    c = ( char   * ) malloc(l * sizeof ( char ));
    i = strlen(a) - 1 ;
    j = strlen(b) - 1 ;
    k = 0 ;up = 0 ;
     while (i >= 0 || j >= 0 )
        {
             if (i < 0 ) x = ' 0 ' ;  else  x = a[i];
             if (j < 0 ) y = ' 0 ' ;  else  y = b[j];
            z = x - ' 0 ' + y - ' 0 ' ;
             if (up) z += 1 ;
             if (z > 9 ) {up = 1 ;z %= 10 ;}  else  up = 0 ;
            c[k ++ ] = z + ' 0 ' ;
            i -- ;j -- ;
        }
     if (up) c[k ++ ] = ' 1 ' ;
    i = 0 ;
    c[k] = ' /0 ' ;
     for (k -= 1 ;k >= 0 ;k -- )
        back[i ++ ] = c[k];
    back[i] = ' /0 ' ;
}

int  main()
{
     char  str1[maxn],str2[maxn];
     int  i,n,num;
    strcpy(Fibonacci[ 1 ], " 1 " );
    strcpy(Fibonacci[ 2 ], " 1 " );
     for (i  =   3 ; i <=   1000 ; i  ++ )
    {
         // strcpy(str1,Fibonacci[i-1]);
         // strcpy(str2,Fibonacci[i-2]);
        add(Fibonacci[i - 1 ],Fibonacci[i - 2 ],back);
        strcpy(Fibonacci[i],back);
    }
    scanf( " %d " , & n);
     while (n -- )
    {
        scanf( " %d " , & num);
        printf( " %s/n " ,Fibonacci[num]);
    }
     return   0 ;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值