之前偶然闲逛看到了poj1001,觉得这种高精度算法很有意思。就了解了一下,发现其原理还是很有意思的。现在分享一下。拿乘法来说——64*64=4096。如何使用高精度算法进行计算呢?我尝试着画了了下图。
通过图像知道了具体原理,那么代码的实现方法呢?想必通过示例不难猜到,使用数组是个不错的解决方案。
int a[10000],b[10000],c[10000];
for(int i=1;i<=a[0];i++)
for(int j=1;j<=b[0];j++)
c[i+j-1]=a[i]*b[j]; //类似说明示例中的两个6*4 a/b[0]代表位数
for(int i=1;i<=a[0]*b[0];i++)
{
c[i+1]+=c[i]/10; //进位
c[i]%=10; //取余
}
可能看到这里有读者会疑惑,那么非整数呢?分而治之即可。以上就是我关于高精度算法的简单理解。如有不妥欢迎交流。