高精度加法-给定两个正整数,计算它们的和。 输入格式 共两行,每行包含一个整数。 输出格式 共一行,包含所求的和。 数据范围 1≤整数长度≤100000

#include<iostream>
#include<cstring>
using namespace std;
const int N=100010;
int a[N],b[N],c[N];//全局变量默认值为0,无需初始化
char s1[N],s2[N],t[N];
int main(){
    
    
    cin>>s1>>s2;
    int l1=strlen(s1);
    int l2=strlen(s2);
    for(int j=0,i=l1-1;i>=0;i--,j++)
    a[j]=s1[i]-'0';
    for(int j=0,i=l2-1;i>=0;i--,j++)
    b[j]=s2[i]-'0';
    int jw=0;//进位
    int len = max(l1, l2)+1;//注意因为最高位可能出现进位
    for (int i=0; i<len; i++) {
    
    
        c[i] = a[i] + b[i] + jw;//当前加数A位数据+加数B位位数据+上一位的进位
        jw = c[i] / 10;//本次加法是否存在进位
        c[i] %= 10;//只能保存 0 ~ 9 的数据
    }
    //删除前导零
    for (int i=len-1; i>=0; i--) {
    
    
        if (0==c[i] && len>1) {
    
    
            //注意要有 len>1 这个条件。考虑特殊情况,加法结果为 00,我们实际要输出 0。
            len--;
        } else {
    
    
            break;
        }
    }

    for(int i=len-1;i>=0;i--)
    cout<<c[i];
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_46443659/article/details/109956937