大数加法

#include <iostream>
#include <cstdio>
#include <cstring>

#define MAX 10000

using namespace std;

typedef struct bignum   //定义大数类型
{
    bignum(){memset(arr,0,sizeof(arr));length=0;}   //初始化成员变量
    int arr[MAX*2+10];
    int length;
}Bignum;

char s[MAX];
char t[MAX];

Bignum atoi(char *s)   //字符串转换为大数类型
{
    Bignum res;
    int slen=strlen(s);
    for(int k=slen-1;k>=0;k--)
    {
        res.arr[k]=s[k]-'0';
    }
    res.length=slen;
    return res;
}


//大数加法
Bignum add(Bignum a,Bignum b)
{
    Bignum res;
    if(a.length<b.length)   //如果a的长度小于b的长度,交换a,b。
        swap(a,b);
    int i,j;
    for(i=a.length-1,j=b.length-1;j>=0;i--,j--)   //后往前处理,把b的值全部加到a
    {
        a.arr[i]+=b.arr[j];
    }
    res.length=a.length+1;  //更新一下长度

    //处理进位
    int temp=0;
    for(i=a.length-1;i>=0;i--)
    {
        int sum=a.arr[i]+temp;
        res.arr[i+1]=sum%10;
        temp=sum/10;
    }
    if(temp)
        res.arr[0]=temp;

    //处理前导0
    if(res.arr[0]==0)
    {
        for(j=0;j<res.length-1;j++)
            res.arr[j]=res.arr[j+1];
        res.length--;
    }
    return res;

}

//输出大数
void print(Bignum b)
{
    for(int i=0;i<b.length;i++)
        cout<<b.arr[i];
    cout<<endl;
}

int main()
{

    while(cin>>s>>t)
    {
        print(add(atoi(s),atoi(t)));
    }

    return 0;
}

  

人生如修仙,岂是一日间。何时登临顶,上善若水前。
原文地址:https://www.cnblogs.com/f-society/p/6706320.html