高精度加法 bignum类实现(hdu 1865)

来源:互联网 发布:淘宝卖家贷款多久到账 编辑:程序博客网 时间:2024/06/08 15:47
#include <bits/stdc++.h>
#define maxn 10005
#define LL long long
using namespace std;

struct bignum
{
    char a[maxn];
    bignum operator +(const bignum &b)
    {
        bignum c(a);
        int i,j,k,sum=0;
        k=strlen(c.a)>strlen(b.a)?strlen(c.a):strlen(b.a);
        c.a[k+1]=0;
        for(i=strlen(c.a)-1,j=strlen(b.a)-1; i>=0||j>=0; i--,j--,k--)
        {
            if(i>=0) sum+=c.a[i]-'0';
            if(j>=0) sum+=b.a[j]-'0';
            c.a[k]=sum%10+'0';
            sum/=10;
        }
        if(sum) c.a[0]=sum+'0';
        else strcpy(c.a,&c.a[1]);
        return c;
    }
    bignum &operator =(const bignum &b)
    {
        strcpy(a,b.a);
        return *this;
    }
    bignum(char s[])
    {
        strcpy(a,s);
    }
    bignum()
    {
        memset(a,0,sizeof(a));
    }
};
bignum dp[500];

void ini()
{
    dp[0]=dp[1]=bignum("1");
    for(int i=2; i<500; i++)
    {
        dp[i]=dp[i-1]+dp[i-2];
    }
}
int main()
{
//    bignum c,b;
//    while(scanf("%s%s",c.a,b.a))
//    {
//        cout<<(c+b).a<<endl;
//    }
    ini();
    int cas;
    cin>>cas;
    char str[maxn];
    while(cas--)
    {
        scanf("%s",str);
        int l=strlen(str);
        strcpy(str,dp[l].a);
        printf("%s\n",str);
    }
    return 0;
}
原创粉丝点击