高精度乘法(用数组模拟笔算)


/*
 
高精度乘法
输入:两行,每行表示一个非负整数(不超过10000位)
输出:两数的乘积。 
*/

#include 
< stdio.h >
#include 
< string .h >
#include 
< stdlib.h >
#include 
< memory.h >

#define  MAX 10001

int  bigchenfa( int   * sum, int   * a, int   * b, int  lsum, int  la, int  lb)
{
    
int  i,j,k ;
    memset(sum,
0 , sizeof (sum));
    lsum 
=   0  ;
    
for (i = 1  ; i <=  la ; i ++ /* 用数组模拟运算 */
    
for (j = 1 ,lsum = i - 1 ; j <=  lb ; j ++ )
    sum[
++ lsum]  +=  b[j]  *  a[i] ;
    
    
for (i = 1  ; i <=  lsum ; i ++ ) /* 进位处理 */
    
if  (sum[i]  >=   10 )
    {
               
if  ( sum[lsum]  >=   10 )
               lsum 
++  ;
               sum[i
+ 1 +=  sum[i]  /   10  ;
               sum[i] 
%=   10  ;
    }
    
    
return  lsum ;
}

    
int  main( void )
{
  
int  a[MAX] = { 0 },b[MAX] = { 0 },sum[MAX * 2 ] = { 0 } ;
  
int  la = 0 ,lb = 0 ,lsum = 0 ;
  
int  i,j ;
  
char  sa[MAX],sb[MAX] ;
  scanf(
" %s %s " ,sa,sb);
  
  la 
=  strlen(sa);
  lb 
=  strlen(sb);
  
  
for (i = 1 ,j = la - 1 ; i <=  la ; i ++ ,j -- )
  a[i] 
=  sa[j]  -   ' 0 '  ;
  
for (i = 1 ,j = lb - 1 ; i <=  lb ; i ++ ,j -- )
  b[i] 
=  sb[j]  -   ' 0 '  ;
  
  lsum 
=  bigchenfa(sum,a,b,lsum,la,lb) ;
  
  
for (i = lsum ; i >=   1  ; i -- )
  printf(
" %d " ,sum[i]);
  
  printf(
" " );
  
  system(
" pause " );
  
  
return   0  ;
}
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值