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

       看左飞的《数据结构原理与经典问题求解》的大整数乘法问题的笔记 ,收获蛮大的,了解了这种算法同时也懂得了语法的细节,如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[n]>=10)
{
ret[n+1]+=ret[n]/10;
ret[n]%=10;
}
     }
//打印最后的结果
i=size-1;
for (;i>=0;i–)
{
cout<<ret[i];
}
}

//还有一个未解决的问题是为什么ret数组的大小一定会在size1+size2之间呢??可能是常识归纳吧



    原文作者:大整数乘法问题
    原文地址: https://blog.csdn.net/qxbailv15/article/details/8576395
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞