分治法递归求解大整数乘法问题?

tiger_ok1 2009-10-11 12:15:58
最近学习《算法设计与分析》(王晓东 编著),其中有关于大整数递归求解的算法分析,想实现一下,但感觉无从下手,比如函数的返回值,参数..应该定成什么类型,于是百度了一下,结果找到了如下程序....
#include <iostream.h>
#include <math.h>

long mult(long x,long y,int n);
int num(long x);

void main() //主函数
{
long x,y;
cout < <"input x and y:" < <endl;
cin>>x>>y;
cout < <mult(x,y,num(x)) < <endl;
}

long mult(long x,long y,int n)
{
long a,b,c,d,s;
if (n==1) //起初这里落了个=号
return x*y;
else
{
a=long(x/pow(10,(n/2))); //取x的左半部分
b=long(x%long(pow(10,(n/2)))); //取x的右半部分
c=long(y/pow(10,(n/2))); //取y的左半部分
d=long(y%long(pow(10,(n/2)))); //取y的右半部分
s=mult(a,c,n)*pow(2,n)+(mult((a-b),(d-c),n)+mult(a,c,n)+mult(b,d,n))*pow(2,n/2)+mult(b,d,n); //书上的公式
return (s);
}
}

int num(long x) //判断输入的数字的位数
{
int i=0;
if(x-9 <=0)
return 1;
else
{
while (x!=0)
{
i++;
x=x/10;
}
return i;
}
}

注:原文链接..http://blog.csdn.net/dzfb/archive/2005/10/16/505113.aspx

但,感觉定义成了long类型就不叫大整数乘法了..个人理解应该是可以计算类似111111111111111111111111111111111 * 111111111111111111111111111111111111111111111这样的才叫大整数运算....

如果改成其他类型的是不是就不能用这种递归算法来求解大整数乘法问题了...
...全文
1016 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sophialy11 2011-05-31
  • 打赏
  • 举报
回复
请问一下,你那个程序用VC6.0编译之后能运行出结果吗?
zhouqiang312 2009-10-11
  • 打赏
  • 举报
回复
正在学习!!!!
wendll 2009-10-11
  • 打赏
  • 举报
回复
用数组储存数,譬如数组间进制为10000;那么如果a[10]可以存储最大数为10000的十次方
给你一个例子算法:

/*
高精度算法,用数组表示数,例如a=823458是6位数
就用a[0]=6; //6位数.
a[1]=8;a[2]=2;a[3]=3; a[4]=4;a[5]=5;a[6]=8;
表示a=823458;
上面是十进制情况,本程序采用万进制,即每个数组元素能存的最大元素为9999
*/

//高精度乘法
void mult(int *a,int *b,int *c)
{//c=a*b;
int i,j,m,n,k,base=10000;//万进制
m=a[0];n=b[0];
k=n+m-1;
for(i=0;i<=k;i++)c[i]=0;
for(i=1;i<=m;i++) {
if(a[i])for(j=1;j<=n;j++)if(b[j])c[i+j-1]+=a[i]*b[j];
}
for(i=k;i>=1;i--)if(c[i]>=base){ c[i-1]+=c[i]/base;c[i]%=base;}
if(c[0]>0)
{k++; for(i=k;i>=1;i--)c[i]=c[i-1]; }c[0]=k;
}

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧