C语言实现大数相乘运算

本篇文章依然是有关TP2的内容。
TP2主要思想:跳出整型浮点型的限制,定义新的容量比较大的数据类型,从而实现一些大数运算
看了一些网上的算法和代码,也从前辈文章里得到一些灵感,产出一个用C语言实现大数相乘的算法
废话不多说,直接上算法和代码

t_EntierLong multiplication(t_EntierLong n1,t_EntierLong n2)
{

    int i,j,m,c;//m是进位变量
    t_EntierLong result;
    result.Negatif=false;
    for(c=0;c<=MAXCHIFFRES;c++)
        result.Chiffres[c]=0;
    t_EntierLong temperesult;
    temperesult.Negatif=false;
    for(c=0;c<=MAXCHIFFRES;c++)
        temperesult.Chiffres[c]=0;

    for(i=0;i<(MAXCHIFFRES/2);i++)//因为相乘位数一共不能大于10,否则溢出
    {
        for(j=0;j<(MAXCHIFFRES/2);j++)
        {
            temperesult.Chiffres[j+i]=(n1.Chiffres[i]*n2.Chiffres[j]%10+m);
            m=n1.Chiffres[i]*n2.Chiffres[j]/10;
        }//里面的for循环得到每一位相乘的结果
        result=additionQcq(result,temperesult);
        for(c=0;c<=MAXCHIFFRES;c++)
            temperesult.Chiffres[c]=0;
    }
    return result;

}

Idea:假设有两个大数n1n2,用N1的每一位去乘n2,得到的数用temper result记录,因为存在10的几次方的关系,每个temper在记录时需要移位。很巧妙的是这个移位可以用循环变量轻易表示出来。
最后result由temper result累加得来。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值