c++高精度乘法(大数乘法)

高精度乘法

对于计算机无法用普通数据类型(如:longint)表示的大整数进行乘法运算,称为高精度乘法。

步骤

高精度乘法主要包括以下几个要求及过程
1、为了获取输入数字的每一位的值,包括个位,十位等,输入整型的数据是无法满足的,因此,输入数据必须为字符串形式。
2、字符串转整型,存储每一位值于数组中
3、高精度乘法,重点!通过模拟人手工计算的方法,进位计算。
4、整型转字符串进行显示

代码

以下代码可以在vs2015社区版中直接运行,关键步骤上都有注释

#include 
using namespace std;

#define Length 100

int *Multi(int *a, int *b ,int la, int lb)
{
	int i, j,*c;
	int len;
	len = la + lb;
	c = (int *)malloc((len) * sizeof(int));
	memset(c, 0, sizeof(int)*len);
	/*高精度乘法的重点,按照人手工进行乘法运算的方式,通过进位的方法计算结果的每一位的值*/
	for (i = 0; i1)//2个数想乘,结果位数必定小于等于2者位数之和
	{                               //大于等于2者位数之和-1
		len--;
	}
	for (i = 0; i < len; i++)//以ASCII码值进行相加,再转换乘字符串形式
	{
		res[i] = num[len - 1 - i] + '0';
	}
	res[len] = '\0';//添加结束符
	return res;
}
void main()
{
	char *s1, *s2,*s;
	int *a, *b, *c;
	int i,la, lb,len;
	s1 = (char *)malloc(Length * sizeof(char));//使用指针进行操作时,需要先分配内存
	s2 = (char *)malloc(Length * sizeof(char));
	memset(s1, 0, sizeof(char)*(Length));//初始化分配的内存,置0
	memset(s2, 0, sizeof(char)*(Length));
	cin >> s1 >> s2;
	la = strlen(s1);//统计字符串长度,不包括结束符'\0'
	lb = strlen(s2);
	len = la + lb;
	a = Str2int(s1);//字符转整型
	b = Str2int(s2);
	c=Multi(a, b, la, lb);//重点:高精度乘法
	s = Int2str(c,len);//整型转字符
	cout << s << endl;
}

你可能感兴趣的:(c++学习)