bigint

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <list>
#include <vector>

#define INF 0x3f3f3f3f
#define MS(x,y) memset(x, y, sizeof(x))
#define MOD 1000000007
#define LL long long int

using namespace std;

const int Len = 8;
const int Base = 100000000;
char s1[50010], s2[50010];
int d[10];

struct bigint
{
    int v[150];
    int lenth;
    bigint()
    {
        lenth = 0;
        for(int i=0;i<150;++i)
            v[i] = 0;
    }

    void read(char* s)
    {
        lenth = 0;
        for(int i=0;i<150;++i)
            v[i] = 0;
        int len = strlen(s);
        int now = 0;
        int num = 0;
        for(int i=len-1;i>=0;--i)
        {
            num += (s[i]-'0')*d[now];
            ++now;
            if(now == Len)
            {
                v[lenth++] = num;
                now = num = 0;
            }
        }
        if(now)
        {
            v[lenth++] = num;
        }
    }

    void add(bigint x)
    {
        lenth = max(lenth, x.lenth);
        int t = 0;
        for(int i=0;i<lenth;++i)
        {
            v[i] += x.v[i]+t;
            t = v[i]/Base;
            v[i] %= Base;
        }
        if(t)
            v[lenth++] = t;
    }

    void print()
    {
        bool lead = true;
        for(int i = lenth-1;i >= 0;--i)
        {
            if(lead)
            {
                if(v[i] != 0)
                {
                    printf("%d", v[i]);
                    lead = false;
                }
            }
            else
            {
                printf("%08d", v[i]);
            }
        }
        if(lead)
            printf("0");
        printf("\n");
    }

};


bigint a,b;
int T;


int main()
{
    //std::ios::sync_with_stdio(false);
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
    d[0] = 1;
    for(int i=1;i<Len;++i)
        d[i] = d[i-1]*10;
    scanf("%d", &T);
    for(int Case=1; Case<=T; ++Case)
    {
        scanf("%s%s", s1, s2);
        printf("Case %d:\n", Case);
        printf("%s + %s = ", s1, s2);
        a.read(s1);
        b.read(s2);
//        a.print();
//        b.print();
        a.add(b);
        a.print();
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值