大整数加法 (C++实现)
有两个大整数,大到 long 型都无法存放,如何实现它们相加?
我们要改变一下两个大整数的存储方式
思路:
可以使用字符串来存储数据,字符串不限长度,再大的数字都能存下来。
我们手动在纸上模拟一下运算,
先将两个数,从个位数开始对齐,然后逐位相加,
和大于10则产生进位,和与10的余数作为结果的值,
下一次的数字之和则还需要加上进位
注意:
如果两个数的位数不相等的话,只需要在短的那个前面补0,与长的那个数的位数相同即可,这样则不需要考虑是否越界的问题
C++示例代码:
#include<iostream>
using namespace std;
int main(){
//大整数加法
string num1="11179152",num2="25197";
string res="";
int len1=num1.size();
int len2=num2.size();
//短的字符补齐 0
if(len1>len2)
num2.insert(num2.begin(),len1-len2,'0');
else if(len1<len2)
num1.insert(num1.begin(),len2-len1,'0');
int cbit=0;//进位
for(int i=num1.size()-1;i>=0;i--){
int sum=(num1[i]-'0')+(num2[i]-'0')+cbit;//对应位之和 + 进位
if(cbit)//进位清除
cbit--;
res.insert(res.begin(),(sum%10)+'0');//前插
if(sum/10)//有进位
cbit++;
}
if(cbit)
cout<<cbit;
cout<<res;
}