问题描述
遇到一道笔试题,要实现大整数相乘。回来查了下java的BigInteger类实现大整数相乘的方法。代码如下:privateint[]multiplyToLen(int[]x,intxlen,int[]y,intylen,int[]z){intxstart=xlen-1;intystart=ylen-1;if(z==null||z.length<(xlen+ylen))z=newint[xlen+ylen];/***111111111111111111*/longcarry=0;for(intj=ystart,k=ystart+1+xstart;j>=0;j--,k--){longproduct=(y[j]&LONG_MASK)*(x[xstart]&LONG_MASK)+carry;z[k]=(int)product;carry=product>>>32;}z[xstart]=(int)carry;/***111111111111111111*//***2222222222222222*/for(inti=xstart-1;i>=0;i--){carry=0;for(intj=ystart,k=ystart+1+i;j>=0;j--,k--){longproduct=(y[j]&LONG_MASK)*(x[i]&LONG_MASK)+(z[k]&LONG_MASK)+carry;z[k]=(int)product;carry=product>>>32;}z[i]=(int)carry;}/***2222222222222222*/returnz;}
比较疑惑的是,1部分完全可以合并到2部分里去,只需要将2部分i初始化为xstart即可。想不出为什么jdk的开发者要把1部分单独拿出来?有没有大大给指点一二。
解决方案
解决方案二:
看不懂。。up
解决方案三:
如何可以的话,你自己设置个断点DEBUG跟踪呗。你可以看看每步的变量值
解决方案四:
该回复于2010-12-03 11:53:42被版主删除
解决方案五:
引用2楼jxsryecheng的回复:
如何可以的话,你自己设置个断点DEBUG跟踪呗。你可以看看每步的变量值
我test过,没发现修改后的会有问题。所以怀疑可能是有自己想不到的特殊情况。谢谢帮顶的几位。
解决方案六:
这都不一样怎么能和到一起啊?。。。。
解决方案七:
2部分有(z[k]&LONG_MASK)1部分没有