高精度乘法(C语言版本)

由于笔者最初在一次电脑课想计算大数乘法(即高精度乘法),通过几个月的摸索终于实现了高精度乘法。
首先我们要知道什么叫取余。
取余即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]);/*输出*/
}

大概就是这样,这就是整个高精度乘法的过程模拟。
虽然没有用到像傅里叶转换的算法,但是结果是没问题的。
谢谢你们收看,记得点赞评论哦。

猜你喜欢

转载自blog.csdn.net/shanyoufengfu/article/details/104904585