大整数加法怎么做?yangtuoyu的博客

描述

求两个不超过200位的非负整数的和。

输入有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。输出一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

样例输入

22222222222222222222
33333333333333333333

样例输出

55555555555555555555
提示:
大整数加法也就是高精度加法
参考程序如下:
#include<bits/stdc++.h>
using namespace std;
char sa[1010],sb[1010];
int la,lb,lc,a[1010],b[1010],c[1010];
int n=0;
int main(){
    scanf("%s",sa);
    scanf("%s",sb);
    la=strlen(sa);
    lb=strlen(sb);
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    for(int i=0;i<la;i++){
        a[la-i-1]=sa[i]-'0';
    }
    for(int i=0;i<lb;i++){
        b[lb-i-1]=sb[i]-'0';
    }
    lc=la>lb?la:lb;
    memset(c,0,sizeof(c));
    for(int i=0;i<lc;i++){
        c[i]=a[i]+b[i]+c[i];
        if(c[i]>=10){
            c[i+1]=1;
            c[i]-=10;
        }
    }
    if(c[lc]>0){
        lc++;
    }
    for(int i=lc-1;i>=0;i--){
        if(c[i]==0){
            n++;
        }
    }
    if(n==lc){
        cout<<"0";
    }else{
        bool flag=true;
        for(int i=lc-1;i>=0;i--){
            if(c[i]==0&&flag){
                continue;
            }else{
                flag=false;
            }
            printf("%d",c[i]);
        }
    }
}

 

 

 



上一篇:云比特矿机区块链系统开发


下一篇:1155 Heap Paths