您的位置:首页 > 理论基础 > 数据结构算法

大整数乘法问题(学习笔记)

2013-02-07 23:18 183 查看
       看左飞的《数据结构原理与经典问题求解》的大整数乘法问题的笔记 ,收获蛮大的,了解了这种算法同时也懂得了语法的细节,如http://bbs.csdn.net/topics/270084028上的帖子是我遇到问题是查看的,例如关于数组做为参数传递时的退化成指针的问题,与及sizeof在编译时就已经确定好大小等细节问题。

自己尝试写的代码如下:

#include <iostream>

using namespace std;

void multiply(int* num1,int size1,int* num2,int size2);//num1*num2

int main()

{

// int num1[]={1,2,4,4,2,4,5,6,6,7,7,5,3,9,0,1,0,2};

// int
num2[]={2,2,3,3,8,8,5,3,3,4,3,1};//注意最后一位不应当是0 “低位对低位原则”
int num1[]={0,0,2};
int num2[]={0,1};//200*10测试

int size1=sizeof(num1)/sizeof(int);
int size2=sizeof(num2)/sizeof(int);
multiply(num1,size1,num2,size2);
return 0;

}

void multiply(int num1[],int size1,int num2[],int size2)//大整数乘法  计算出结果后再在本函数里打印出结果

{
//int size1,size2,size;//size1,size2不应当在这里计算,因为这里的sizeof(num1)=4(无论num里由多少个数)
//是因为这里计算的是指针大小   具体解释在http://bbs.csdn.net/topics/270084028可以看到

int size=size1+size2;
int* ret=new int[size];
memset(ret,0,size*sizeof(int));//按字节初始化的
int i,j,k;
i=j=k=0;
for (i=0;i<size2;i++)//对应num2数组
{
k=i;
for (j=0;j<size1;j++)//对应num1数组
{
ret[k++] += num1[j]*num2[i];
}
}

     for (int n=0;n<size;n++)

     {
if (ret
>=10)
{
ret[n+1]+=ret
/10;
ret
%=10;
}

     }
//打印最后的结果
i=size-1;
for (;i>=0;i--)
{
cout<<ret[i];
}

}

//还有一个未解决的问题是为什么ret数组的大小一定会在size1+size2之间呢??可能是常识归纳吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息