由于笔者最初在一次电脑课想计算大数乘法(即高精度乘法),通过几个月的摸索终于实现了高精度乘法。
首先我们要知道什么叫取余。
取余即A/B=C………D,A=B*C+D,其中这个D就是余数;
举个例子:11/10=1……1,其中这个1就是余数。
其次需要新的算法,算法如下。
上图为计算方法,简单来说就是把每个位分离开,都进行互相乘,然后把结果写出来,最后进位即可。
下面我们利用C语言写这个代码。
#include <stdio.h>
void main()
{
int i = 0, c[400000], k = 0, la, lb;/*定义了两个变量,一个数组C(存结果的),la,lb输入的两个数字位数*/
char a[200000] = "\0", b[200000] = "\0";/*定义两个字符串数组*/
scanf("%s %s", a, b);/*输入需要计算的数字*/
la = strlen(a);/*计算数字a的位数*/
lb = strlen(b);/*计算数字b的位数*/
for (i = 0; i <la; i++)/*循环遍历*/
for (k = 0; k <= lb - 1; k++)/*循环遍历*/
c[i + k] = c[i + k] + (a[i] - '0') * (b[k] - '0');/*a[i]-'0'变成数字,乘起来存入数组*/
for (i = la + lb - 1; i > 0; i--)/*遍历进位*/
if (c[i] >= 10){c[i - 1] += c[i] / 10;c[i] %= 10;}/*如果当前的数组大于10,除以10的整数部分进位,取余的留下来*/
for (i = 0; i < la + lb - 1; i++)/*遍历输出结果*/
printf("%d", c[i]);/*输出*/
}
大概就是这样,这就是整个高精度乘法的过程模拟。
虽然没有用到像傅里叶转换的算法,但是结果是没问题的。
谢谢你们收看,记得点赞评论哦。