【发布时间】:2014-06-15 20:35:30
【问题描述】:
在尝试使用 BINARY SEARCH 方法计算 BigInteger 的 平方根 时,我被困在如何计算 BigInteger 之间strong>两个 BigIntegers 用于满足比较操作。 比如,我想检查两个 BigInteger 变量之间的相等性、大于或小于条件。
这是错误的代码,大致了解我想要执行的操作。任何解决问题的努力将不胜感激。
public static BigInteger squareroot(BigInteger bi){
//BigInteger bkl;
BigInteger low,high,mid;
low=ONE;
high=bi.add(ZERO);
while(low<=high)
{
mid =(low.add(high)).divide(new BigInteger("2"));
if(mid.multiply(mid).equals(bi))
return mid;
if(mid.multiply(mid) > bi)
high = mid -1 ;
else
low = mid + 1;
}
return mid;
}
【问题讨论】:
-
平方根的二进制搜索?它是如何工作的?
-
@ElliottFrisch 它执行二进制搜索,高为平方,低为 0,当二进制搜索找到作为平方根的整数时返回。
-
@Human 我在 OP 的帖子中没有看到数组(连续或其他)。另外,如果我传入
10。 -
@ElliottFrisch 我说错了,它以高数为平方 + 1 和低数为 0 开始。它收敛于平方根,就像在数组。
-
当您运行这段代码时,您可以粗略估计将 10 的平方根近似为 3。
标签: java biginteger binary-search comparison-operators