const int N=1100;
struct BigNum{
int front;
int data[N+1];
};
BigNum& Mulit(BigNum up, BigNum down){
int i,k,carry,v;
BigNum prod;
prod.front=up.front+down.front-N+1;
for(i=prod.front;i<=N;i++)prod.data[i]=0;
for(i=N;i>=down.front;i--){
BigNum tmp;
carry=0;
for(k=N;k>=up.front;k--){
v=down.data[i]*up.data[k]+carry;
tmp.data[k]=v%10;
carry=v/10;
}
tmp.front=up.front;
if(carry>0) tmp.data[--tmp.front]=carry;
carry=0;
for(k=N;k>=tmp.front;k--){
v=tmp.data[k]+prod.data[i+k-N]+carry; // when i==N, k to k, then i is decreased 1 each step.
prod.data[i+k-N]=v%10;
carry=v/10;
}
while(carry>0){
v=prod.data[i+k-N]+carry;
prod.data[i+k-N]=v%10;
carry=v/10;
k--;
}
}
while(prod.data[prod.front]==0 && prod.front<N) prod.front++;
return prod;
}
//30'

本文介绍了一种基于数组的大数乘法算法实现方法。通过定义一个结构体来存储大数,并实现了一个乘法函数,该函数能够处理两个大数的乘法运算。此算法适用于需要进行精确大数运算的场景。

1664

被折叠的 条评论
为什么被折叠?



