加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数加法和大数乘法

发布时间:2020-12-14 04:01:38 所属栏目:大数据 来源:网络整理
导读:想法极其简单。。。。没什么trick void reverseVector(vectorint vec){for(int i=0,j=vec.size()-1;ij;++i,--j){int t = vec.at(i);vec.at(i) = vec.at(j);vec.at(j) = t;}}vectorint addtwo(vectorint num1,vectorint num2){reverseVector(num1);reverseVec

想法极其简单。。。。没什么trick


void reverseVector(vector<int> &vec){
	for(int i=0,j=vec.size()-1;i<j;++i,--j){
		int t = vec.at(i);
		vec.at(i) = vec.at(j);
		vec.at(j) = t;
	}
}

vector<int> addtwo(vector<int> &num1,vector<int> &num2){
	reverseVector(num1);reverseVector(num2);
	int jinwei = 0;
	vector<int> sum;
	int i = 0;
	for(i=0;i<num1.size() && i<num2.size();++i){
		int tmpsum = num1.at(i) + num2.at(i) + jinwei;
		jinwei = tmpsum/10;
		tmpsum %= 10;
		sum.push_back(tmpsum);
	}
	while(i<num1.size()){
		int tmpsum = num1.at(i++) + jinwei;
		jinwei = tmpsum/10;
		tmpsum %= 10;
		sum.push_back(tmpsum);
	}
	while(i<num2.size()){
		int tmpsum = num2.at(i++) + jinwei;
		jinwei = tmpsum/10;
		tmpsum %= 10;
		sum.push_back(tmpsum);
	}
	if(jinwei != 0)
		sum.push_back(jinwei);
	reverseVector(sum);
	return sum;
}

void multitwo(){
	string numStr1,numStr2;
	vector<int> num1,num2,result,tmpre;
	cin>>numStr1>>numStr2;
	bool negbool = false;
	negbool = (numStr1.at(0) == '-') ^ (numStr2.at(0) == '-');
	for(int i=(numStr1.at(0)=='-')?1:0;i<numStr1.length();++i)
		if(numStr1.at(i)<='9' && numStr1.at(i)>='0')
			num1.push_back(numStr1.at(i)-'0');
		else{
			error = true;
			return;
		}
	for(int i=(numStr2.at(0)=='-')?1:0;i<numStr2.length();++i)
		if(numStr2.at(i)<='9' && numStr2.at(i)>='0')
			num2.push_back(numStr2.at(i)-'0');
		else{
			error = true;
			return;
		}
	reverseVector(num1);
	reverseVector(num2);
	result.clear();
	for(int i=0;i<num1.size();++i){
		tmpre.clear();
		int number = num1.at(i);
		int jinwei = 0;
		for(int j=0;j<num2.size();++j){
			int tmpsum = number*num2.at(j) + jinwei;
			jinwei = tmpsum/10;
			tmpsum = tmpsum%10;
			tmpre.push_back(tmpsum);
		}
		if(jinwei != 0)	tmpre.push_back(jinwei);
		//局部加法
		reverseVector(result);		
		//tmpre右移i位
		for(int j=0;j<i;++j)
			tmpre.push_back(0);
		for(int j=tmpre.size()-1;j>=i;--j)
			tmpre.at(j) = tmpre.at(j-i);
		for(int j=0;j<i;++j)
			tmpre.at(j) = 0;
		reverseVector(tmpre);
		result = addtwo(result,tmpre);
		reverseVector(result);
	}
	reverseVector(result);
	int i = 0;
	while(result.size()!=1){
		if(result.at(i) != 0)	break;
		result.erase(result.begin()+i);
	}
	if(negbool && result.at(0)!=0)	cout<<"-";
	for(int i=0;i<result.size();++i)
		cout<<result.at(i);
	cout<<endl;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读