1 条题解
-
0
#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
- 上传者