大数相乘

本文介绍了一个使用 C 语言实现的字符串乘法算法。该算法能够处理任意长度的字符串相乘问题,并通过逐位相乘再累加的方式得出最终结果。文章详细展示了如何管理进位、如何将中间结果存储及相加的过程。

 

char * mutiply(const char * num1,const char * num2)
{
    
int len1 = strlen(num1);
    
int len2 = strlen(num2);

    
static char result[MAX_NUM*2];
    memset(result,
'0',MAX_NUM*2);

    
char mid[2]={0,0};//保存两个个位数相乘的结果,mid[0]存放十位数,mid[1]存放个位数
    
int sign=0; //进位
    
int sign2=0; //进位

    
for (int j=1;j<=len2;j++)
    
{
        
for (int i=1;i<=len1;i++)
        
{
            
int tmp = (num1[len1-i]-'0')*(num2[len2-j]-'0');
            mid[
1]=tmp%10;
            mid[
0]=(int)tmp/10;
               int pos = MAX_NUM*2 - 1 - ( (i-1) +(j-1) );

            sign 
= int(((result[pos]+mid[1])-'0')/10); //求个位相加进位,有则为1,无则为0

            result[pos]='0'+(result[pos]+mid[1]-'0')%10; //把个位数加到结果去
              
               sign2 = (int)((result[pos - 1]+sign+mid[0]-'0')/10); //求十位相加进位,有则为1,无则为0

            result[pos - 1= '0'+(result[pos - 1]+sign+mid[0]-'0')%10; //把十位数加到结果去
               //依次检查进位,直到没有进位为止
            
for (int k=1;sign2;k++)
            
{
                sign 
=(int) ((result[pos - 1 - k]+sign2-'0')/10);
                result[pos - 1 - k
= '0'+(result[pos - 1 - k]+sign2-'0')%10;
                sign2 
= sign;
            }

        }

    }

    
int i=0;
    
for(;result[i]=='0';i++)
        ;
    
return result+i;

}

            
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值