相同位数的大整数乘法

大整数乘法

递归与分治解决

运用递归把大整数abcd…的每个位数提取出来,按照a10^n + b * 10^n-1 + c * 10 ^n-2+…
在这里用分治将第一个整数化为2部分AB,第二个整数化为CD然后分而治之
然后按照乘法法则进行展开,这就是递归公式:
在这里插入图片描述
然后进行变换将AD+BC化为由AC,BD的式子**(A-C)*(D-B)+AB+CD**减少计算,减少时间复杂度
而递归的结束条件是当位数为1时,返回计算结果,还有当出现0时也结束递归。在这里由于不知道整数的正负号,所以设置了一个flag函数判断并保存最后结果的符号,而后继续进行递归,分治求解
具体代码如下

#include<bits/stdc++.h>

#define l long
using namespace std;
const int N=1005;
int a[N];
int flag(long v)//判断符号函数
{
   
    return v>0 ? 1:0;
}

l solve(l x,l y,int n)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值