1 条题解

  • 0
    @ 2026-1-28 14:26:06
    #include<bits/stdc++.h>
    using namespace std;
    // [1] a、b:分别存储两个输入大整数的每一位(低位在前,便于从低位开始计算)
    int a[10000],b[10000];
    
    int main(){
        string s1, s2;  // [2] s1、s2:输入的两个高精度大整数字符串
    	cin >> s1 >> s2; 
    
    	int la=s1.size(),lb=s2.size(); // [3] la:第一个数的位数,lb:第二个数的位数
    
        // [4] 将第一个数s1逆序存入数组a(低位在前,如"123"存入后a[0]=3, a[1]=2, a[2]=1)
    	for(int i=0; i < la; i++)		a[la-i-1] = s1[i] - '0';
        // [5] 将第二个数s2逆序存入数组b(低位在前,如"45"存入后b[0]=5, b[1]=4)
    	for(int i=0; i < lb; i++)		b[lb-i-1] = s2[i] - '0';
    
    	string s3=""; // [6] s3:存储最终的加法结果字符串
    	int i=0,j=0,jw=0,sum; // [7] i、j:遍历数组a、b的指针;jw:进位;sum:当前位的和
    
        // [8] 循环处理每一位相加,直到两个数的所有位都处理完毕
    	while(i<la || j<lb){
    		sum=0;
            // 累加当前位的数字(若指针未越界则取对应位,否则补0)
    		if(i<la) sum+=a[i++];
    		else sum+=0;
    		if(j<lb) sum+=b[j++];
    		else sum+=0; 
    
            // 计算当前位的结果(加上进位后取模10),并拼接到结果字符串的前面
    		s3=char((sum+jw)%10+'0')+s3;
            // 更新进位(当前位和加进位后除以10)
    		jw=(sum+jw)/10;
    	}
    
        // [9] 若最后仍有进位,将进位拼接到结果字符串的最前面
    	if(jw!=0) s3=char(jw+'0')+s3;
    
        // [10] 输出最终的加法结果
    	cout<<s3;
        return 0;
    }
    
    • 1

    信息

    ID
    1233
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    1
    已通过
    1
    上传者