ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-03-16 18:01:32  阅读:281  来源: 互联网

标签:10 lb 高精度 la 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]);/*输出*/
}

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

标签:10,lb,高精度,la,C语言,进位,乘法
来源: https://blog.csdn.net/shanyoufengfu/article/details/104904585

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有