大整数乘法
【分析】
一般情况下,求两个大整数相乘往往利用分治法解决,理解起来较为困难,这里我们使用的方法是模拟人类大脑计算两个整数相乘的方式进行求解大整数相乘,中间结果和最后结果仍然使用数组来存储。
假设A为被乘数,B为乘数,分别从A和B的最低位开始,将B的最低位分别与A的个位数依次相乘,乘积的最低位存放在数组元素a[门]中,高位(进位)存放在临时变量d中;再将B的次低位与A的个位数相乘,并加上得到的进位d和a[],就是B中该位数字与A中对应位上数字的乘积,其中a[i]是之前得到乘积的第i位数字。依此类推,即可得到两个整数的乘积。
code:
#include <stdio.h>
#include <string.h>
#include <iostream>
void main()
{
long b, d;
int i, i1, i2, j, k, n, n1, n2, a[256];
char s1[256], s2[256];
printf("输入一个整数:");
scanf("%s", &s1);
printf("再输入一个整数:");
scanf("%s", &s2);
for (i = 0; i < 255; i++)
a[i] = 0;
n1 = strlen(s1);
n2 = strlen(s2);
d = 0;
for (i1 = 0, k = n1 - 1; i1 < n1; i1++, k--)
{
for (i2 = 0, j = n2 - 1; i2 < n2; i2++, j--)
{
i = i1 + i2;
b = a[i] + (s1[k] - 48)*(s2[j] - 48) + d;
a[i] = b % 10;
d = b / 10;
}
if (d > 0)
{
i++;
a[i] = a[i] + d % 10;
d = d / 10;
}
n = i;
}
printf("%s * %s= ", s1, s2);
for (i = n; i >= 0; i--)
printf("%d", a[i]);
printf("\n");
system("pause");
}
结果: