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

本文介绍了一种使用C语言实现的高精度乘法算法,适用于处理非常大的非负整数(最多可达10000位)。通过数组模拟运算过程,并采用进位处理确保准确性。文章提供了完整的代码示例及解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


/*
 
高精度乘法
输入:两行,每行表示一个非负整数(不超过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 ;
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值