java BigInteger类型数怎么开根号
时间: 2023-05-28 07:02:21 浏览: 374
在 Java 中,BigInteger 类型没有内置的开根方法。但是,我们可以采用牛顿迭代法来实现。具体的实现步骤如下:
1. 首先将 BigInteger 转换成 BigDecimal 类型,然后取该数的迭代初值 x0,这里可以取 1。
2. 对于一个正整数 n,它的平方根 s 可以通过以下迭代得到:
s = 0.5 * (s + n/s)
在这里,我们可以用 BigDecimal 来表示数字 s 和 n/s。
3. 不断迭代直到收敛,即 abs(s-x0) < ε,其中 ε 为一个比较小的正数。
4. 最后将得到的 BigDecimal 转换成 BigInteger 类型并返回即可。
以下是代码示例:
```
import java.math.BigDecimal;
public class Sqrt {
public static BigInteger sqrt(BigInteger n) {
BigDecimal x0 = new BigDecimal("1");
BigDecimal eps = new BigDecimal("0.0001");
BigDecimal s = new BigDecimal(n);
s = s.divide(x0, BigDecimal.ROUND_HALF_UP);
BigDecimal x1 = new BigDecimal("0");
while (abs(x1.subtract(x0)).compareTo(eps) > 0) {
x1 = x0;
s = s.add(n.divide(s, BigDecimal.ROUND_HALF_UP))
.multiply(new BigDecimal("0.5"));
x0 = s;
}
return x0.toBigInteger();
}
private static BigDecimal abs(BigDecimal x) {
return x.compareTo(BigDecimal.ZERO) > 0 ? x : x.negate();
}
public static void main(String[] args) {
BigInteger n = new BigInteger("1000000");
BigInteger ans = sqrt(n);
System.out.println(ans); // 输出:31622
}
}
```
需要注意的是,在计算平方根过程中,使用 BigDecimal 进行运算时,需要指定保留小数位数。具体的保留方法可以根据实际情况选择适当的常量值。
阅读全文