一、c++实现大数相加
在我们使用c/c++相加两个数时,一旦值超过2^ 32-1相加往往都会因内存溢出而导致结果出错,那么我们今天就来实现一个避免出现这种问题的相加函数。
1、具体实现
这里我们用c++来实现,用到了c++中的容器string
建立一个 ‘test.cpp’ 文件
#include<iostream>
#include<string>
using namespace std;//一般情况下我们是不随便打开命名空间的,当然这里是测试就打开命名空间了
string Add(string num1,string num2){
int end1=num1.size()-1;
int end2=num2.size()-1;
int next=0;
string str;
while(end1>=0||end2>=0){
int val1=end1>=0?num1[end1--]-'0':0;
int val2=end2>=0?num2[end2--]-'0':0;
int ret=val1+val2+next;
next=ret/10;
ret=ret%10;
str.insert(0,1,ret+'0');
}
if(1==next){
str.insert(0,1,'0'+1);//'0'+1会隐式类型转换成string类型
}
return str;
}
int main(){
cout<<"please write numbers of add"<<endl;
string num1;
string num2;
cin>>num1;
cin>>num2;
string add=Add(num1,num2);
cout<<"result is "<<add<<endl;
return 0;
}
2、简单思路概述
这里我们停止使用c++中的内置类型相加,采取了用字符串相加,string容器不会因为像内置固定的大小而限制最终结果了,这样就更好的解决了大数相加而内置类型存储有限而造成的问题了。