

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
//计算某一运算数的位数
int size(long long x)
{
int sum = 0;
do
{
sum++;
x /= 10;
} while (x);
return sum;
}
long long Karatsuba(long long x, long long y)
{
if (x < 10 || y < 10)
{
return x * y;
}
else
{
long long m, x0, x1, y0, y1, z0, z1, z2;
m = max(size(x), size(y)) / 2;
//将x,y从中间分割开
x1 = x / (long)pow(10, m);
x0 = x - x1 * (long)pow(10, m);
y1 = y / (long)pow(10, m);
y0 = y - y1 * (long)pow(10, m);
z2 = Karatsuba(x1, y1);
z0 = Karatsuba(x0, y0);
z1 = Karatsuba((x1 + x0), (y1 + y0)) - z2 - z0;
return z2 * (long)pow(10, 2 * m) + z1 * (long)pow(10, m) + z0;
}
}
int main()
{
long a = 168946561;
long b = 465152323;
cout << Karatsuba(a, b);
system("pause");
return 0;
}

本文介绍了一种高效的多项式乘法算法——Karatsuba算法,并提供了详细的C++实现代码。该算法通过递归地将长整数乘法转换为更小的子问题来减少计算复杂度。
580

被折叠的 条评论
为什么被折叠?



