• 大数加法


    #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;
    }
    

      

    人生如修仙,岂是一日间。何时登临顶,上善若水前。
  • 相关阅读:
    java学生成绩管理系统
    7.19至7.25第八周学习情况
    8.12至8.18第七周学习情况
    8.5至8.11第六周学习情况
    7.29至8.4第五周学习情况
    《大道至简》读后感
    7.22至7.28第四周学习情况
    7.15至7.21第三周学习情况
    LeetCode 第三题:Longest Substring Without Repeating Characters
    哈希表(散列表)
  • 原文地址:https://www.cnblogs.com/f-society/p/6706320.html
Copyright © 2020-2023  润新知