大整数的乘法问题

来源:互联网 发布:大众软件 1995 pdf 编辑:程序博客网 时间:2024/04/29 05:02

如果两个很大的整数相乘,结果无法以简单的数据类型存储,可以假设将每位分开存储到数组里面,本例暂不考虑数字存放时的空间优化问题。

#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;}