Big number multiplication 大整数乘法

来源:互联网 发布:java多态原理 编辑:程序博客网 时间:2024/05/17 23:39
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'
 
原创粉丝点击