大整数相乘算法

代码
 1           long  mult( long  x,  long  y,  int  n)
 2          {
 3               long  a, b, c, d, s;
 4              s  =  Math.Sign(x)  *  Math.Sign(y);
 5              x  =  Math.Abs(x);
 6              y  =  Math.Abs(y);
 7               if  (n  ==   1 )
 8                   return  s  *  x  *  y;
 9               else
10              {
11                   // XY=AC*10^4+ [AC + (A-B) (D-C) + BD] *10^2+BD                     
12                  a  =  ( long )(x  /  Math.Pow( 10 , (n  /   2 )));  // 取x的左半部分
13                  b  =  ( long )(x  %  ( long )(Math.Pow( 10 , (n  /   2 ))));  // 取x的右半部分
14                  c  =  ( long )(y  /  Math.Pow( 10 , (n  /   2 )));  // 取y的左半部分
15                  d  =  ( long )(y  %  ( long )(Math.Pow( 10 , (n  /   2 ))));  // 取y的右半部分
16                   long  m1  =  mult(a, c, n  /   2 );   // AC
17                   long  m2  =  mult(a  -  b, d  -  c, n  /   2 );  // (A-B)(D-C)
18                   long  m3  =  mult(b, d, n  /   2 ); // BD
19                  s  =  s  *  (m1  *  ( long )Math.Pow( 10 , n)  +  (m1  +  m2  +  m3)  *  ( long )Math.Pow( 10 , n  /   2 +  m3);
20                   return  (s);
21              }
22          }

 

以下是另一种解法,但不是最好:

 

代码
         int  fun( int [] a,  int [] b)
        {
            
int  sum  =   0 ;
            
for  ( int  j  =  b.Length - 1 ; j  >= 0 ; j -- )
            {
                
int  s  =   0 ;
                
for  ( int  i  = a.Length - 1 ; i  >= 0 ; i -- )
                {
                    s 
+=  a[i]  *  b[j]  *  ( int )Math.Pow( 10 , a.Length  -   1   -  i);
                }
                sum 
+=  s *  ( int )Math.Pow( 10 , b.Length  -   1   -  j);
            }
            
return  sum;
        }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值