如果两个很大的整数相乘,结果无法以简单的数据类型存储,可以假设将每位分开存储到数组里面,本例暂不考虑数字存放时的空间优化问题。
#include<iostream>
#include<string.h>
#include<memory.h>
using namespace std;
void multi(int *a,int asize,int *b,int bsize);
int main()
{
int a[]={1,1,1,1};
int b[]={1,1,1,1};
multi(a,sizeof(a)/sizeof(int),b,sizeof(b)/sizeof(int));
return 0;
}
void multi(int *a,int asize,int *b,int bsize)
{
int size = asize + bsize;//乘积的结果不会大于size
int *temp = new int[size];
memset(temp,0,sizeof(int)*size);
//a分别和b的每一位相乘,结果暂时存在temp中
for(int i=0;i<bsize;++i)
{
int k = i;
for(int j=0;j<asize;++j)
{
temp[k] +=b[i] * a[j];
++k;
}
}
for(int i=0;i<size;i++)
{
if(temp[i]>=10)
{
temp[i+1] +=temp[i]/10;
temp[i] %=10;
}
}
//为size-1,注意数组的范围(第一此时候错写成size,结果只有后面位数是正确的)
for(int i=size-1;i>=0;--i)
cout<<temp[i];
delete[] temp;
return;
}