jdk中大整数相乘的实现方法的疑惑

问题描述

遇到一道笔试题,要实现大整数相乘。回来查了下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部分没有

时间: 2025-01-29 11:23:43

jdk中大整数相乘的实现方法的疑惑的相关文章

python里大整数相乘相关技巧指南_python

问题 大整数相乘 思路说明 对于大整数计算,一般都要用某种方法转化,否则会溢出.但是python无此担忧了. Python支持"无限精度"的整数,一般情况下不用考虑整数溢出的问题,而且Python Int类型与任意精度的Long整数类可以无缝转换,超过Int 范围的情况都将转换成Long类型. 例如: >>> 2899887676637907866*1788778992788348277389943 5187258157415700236034169791337062

JavaScript检查数字是否为整数或浮点数的方法

 本文实例讲述了JavaScript检查数字是否为整数或浮点数的方法.分享给大家供大家参考.具体如下: 检查是否为整数: 1 2 3 4 5 6 7 function isInt(n) { return typeof n === 'number' && n % 1 == 0; } // or ,this support ie3 function isInt(n) { return typeof n === 'number' && parseFloat(n) == parse

JavaScript检查数字是否为整数或浮点数的方法_javascript技巧

本文实例讲述了JavaScript检查数字是否为整数或浮点数的方法.分享给大家供大家参考.具体如下: 检查是否为整数: function isInt(n) { return typeof n === 'number' && n % 1 == 0; } // or ,this support ie3 function isInt(n) { return typeof n === 'number' && parseFloat(n) == parseInt(n, 10) &

对于java equals方法的疑惑。

问题描述 对于java equals方法的疑惑. String s1 = new String("123"); String s2 = new String("123"); System.out.println(s1.equals(s2)); Test t1=new Test("123"); Test t2=new Test("123"); System.out.println(t1.equals(t2)); 为何上面输出的是

string-C# split和join方法的疑惑?请各位帮忙看看

问题描述 C# split和join方法的疑惑?请各位帮忙看看 var lineTxt=""; 经过一系列转换lineTxt是M00T11;; char[] charSeparators = new char[] { ';' }; string[] array = lineTxt.Split(charSeparators,StringSplitOptions.RemoveEmptyEntries);//在这里如果我想每三个字符为一个数组该怎么实现呢? lineTxt = string.

MFC中WMP控件的使用方法的疑惑

问题描述 MFC中WMP控件的使用方法的疑惑 在用MFC做一个音乐播放器,插入WMP控件后,不知道如何使用它,怎么才能调用到他本身自带的类,比如fullscreen,怎么才能用他来设置全屏

php判断变量是否是整数的两种方法

方法一:可以用四舍或者五入该数字,再与原数比较,比如floor(3.1)结果应该是3,此时显然3!=3.1,或者用ceil()函数也行,这样也能判断出是否为整数. 方法二:利用php自带的函数 is_int() 可以轻松判断出该数字是否是整数. 举例说明: $a = 3.3; //方法一  代码如下 复制代码 if(floor($a)==$a){  echo "$a 是整数!"; }else{  echo "$a 不是整数!"; } 方法二,  代码如下 复制代码

linux下配置jdk环境变量的三种方法总结_unix linux

一.修改/etc/profile文件当本机仅仅作为开发使用时推荐使用这种方法,因为此种配置时所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题.用文本编辑器打开/etc/profile,在profile文件末尾加入:JAVA_HOME=/usr/share/jdk1.5.0_05 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HO

javascript将浮点数转换成整数的三个方法_javascript技巧

Summary 暂时我就想到3个方法而已.如果读者想到其他好用方法,也可以交流一下 parseInt 位运算符 Math.floor Math.ceil Description 一.parseInt 1. 实例 parseInt("13nash");//13 parseInt("")// NaN parseInt("0xA") //10(十六进制) parseInt(" 13")//13 parseInt("070&