用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