大整数乘法
递归与分治解决
运用递归把大整数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)