大数乘法_C++STL写法模板

用C++的STL写这种异常清晰,
主要是两个函数,一个add函数把两个deuqe的值相加,得到最终答案,其实这个函数是最后执行的。首先执行的是一个deque的所有值依次乘一个整数这个整数是从另一个deque的值每次提取他的最后一个元素(低位)进行乘法操作。这样做的原理很简单,不清楚的朋友自己写两个数然后做乘法,模拟一下,看是不是一个数的每一位先乘另一个数的每一位,然后再把它们的n个(如果有n项和需要相加)项相加。这个时候我们先用fill_n函数把每个的长度补齐,只需要添0就好了,再存到deque中,然后相加。
相信看代码看得懂的,很浅显。

#include
#include
#include
#include
using namespace std;
void f(int &x){
	x-='0';
}
//fill_n(a,6,10);//w往后6个元素每一个插入10 
deque Add_deque(deque a ,deque b){
	 int len_a=a.size(),len_b=b.size();
	 //补齐长度 
	 if(len_a>len_b){
	  	fill_n(front_inserter(b),len_a-len_b,0);
	  } 
	else {
	  	fill_n(front_inserter(a),len_b-len_a,0);
	  }
	  deque c(max(len_a,len_b),0);
	  int carry=0;
	  for(int i=a.size()-1;i>=0;i--){
	      	c[i]=((a[i]+b[i]+carry)%10);
	     	carry=(a[i]+b[i]+carry)/10;
	   }
	   if(carry>0){
	   	c.push_front(carry);
	   }
	   return c;
}
deque Cal(deque a,int b){
	deque c(a.size());
	int carry=0;
	for(int i=a.size()-1;i>=0;i--){
		c[i]=(a[i]*b+carry)%10;
        carry=(a[i]*b+carry)/10;
	} 
	if(carry>0){
		c.push_front(carry);
	}
	return c;
}
int main(){
      dequea;
	  dequeb;
      string a1,b1;
	  cin>>a1>>b1;
      a.assign(a1.begin(),a1.end());
	  b.assign(b1.begin(),b1.end());
	  
	  for_each(a.begin(),a.end(),f);
	  for_each(b.begin(),b.end(),f);
	  
	  deque > q;
	  for(int i=b.size()-1;i>=0;i--){
	  	q.push_back(Cal(a,b[i]));
	  }
	  for(int i=1;i
    原文作者:大整数乘法问题
    原文地址: https://blog.csdn.net/K_HOLMES_/article/details/52215251
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞