计算机的精度是有限的,因此单独使用程序设计语言提供的数据类型来完成两个大整数的乘法显然不切实际。可以考虑用两个数组分别存放大数的每一位数,然后进行计算。
代码如下:
#include<iostream>
#include<memory>
using namespace std;
int * multiply(int * num1,int size1,int * num2,int size2);//计算乘积
int main()
{
// 大数逆序存放,当然也可以顺序
int num1[] = {1,2,3,4,5,6,7,8,9,8,7,6,5,4};//第一个大数是45678987654321
int num2[] = {9,8,7,6,5,4,3,2,1,2,3,4,5,6};//第二个大数是65432123456789
int * result = multiply(num1,14,num2,14);
for (int i = 27; i >= 0; i--)
{
cout<<result[i];
}
cout<<endl;
delete [] result;
return 0;
}
int * multiply(int * num1,int size1,int *num2,int size2)
{
int size = size1 + size2;
int * result = new int[size];
int i = 0;
memset(result,0,sizeof(int) * size);//初始化
for (i = 0; i < size2; ++i)
{
int k = i;
for (int j = 0; j < size1; j++)//计算num2每一位数和num1这个大数的乘积
{
result[k++] += num2[i] * num1[j];
}
}
for (i = 0; i < size; i++)
{
if (result[i] >= 10)//大于10进位处理
{
result[i + 1] += result[i] / 10;
result[i] %= 10;
}
}
return result;
}
1062

被折叠的 条评论
为什么被折叠?



