Java 平方根和++;BigInteger和BigDecimal的运算符
是否有现成的Java库用于对BigInteger和BigDecimal对象进行操作 我想使用平方根和++运算符 多谢各位 我明白了,应该使用p.S.biginger.add()而不是++。 大整数的平方根呢 是不可变的。这使得像Java 平方根和++;BigInteger和BigDecimal的运算符,java,operator-overloading,operators,biginteger,bigdecimal,Java,Operator Overloading,Operators,Biginteger,Bigdecimal,是否有现成的Java库用于对BigInteger和BigDecimal对象进行操作 我想使用平方根和++运算符 多谢各位 我明白了,应该使用p.S.biginger.add()而不是++。 大整数的平方根呢 是不可变的。这使得像++-操作符这样的操作在概念上不可能实现。您不能更改给定的biginger的值,就像您不能使用String一样 递增 您必须始终创建一个新的biginger,以保存递增的值(当然,您可以将对该biginger的引用存储在同一个变量中) 编辑:正如评论中指出的,“递增”看起
++
-操作符这样的操作在概念上不可能实现。您不能更改给定的biginger
的值,就像您不能使用String
一样
递增
您必须始终创建一个新的biginger
,以保存递增的值(当然,您可以将对该biginger
的引用存储在同一个变量中)
编辑:正如评论中指出的,“递增”看起来像:
BigInteger result = a.add(BigInteger.ONE);
或
请注意,这两行不会更改biginger
的值,而a
最初指向该值。最后一行创建一个新的BigInteger,并将对它的引用存储在a
中
计算平方
您可以这样计算BigInteger
的平方:
BigInteger a = BigInteger.valueOf(2);
BigInteger a_square = a.multiply(a); // a^2 == a * a
或
平方根
代码取自。
它使用简单的二分法和巧妙的上界。请注意,a.shiftRight(x)
相当于a/2^x
(仅适用于非负数,但这就是我们要处理的全部内容)
使用运算符而不是方法
<>操作符重载(如C++)在java中是不可能的。 < P>是<强>不可变>。这使得像++
-操作符这样的操作在概念上不可能实现。您不能更改给定的biginger
的值,就像您不能使用String
一样
递增
您必须始终创建一个新的biginger
,以保存递增的值(当然,您可以将对该biginger
的引用存储在同一个变量中)
编辑:正如评论中指出的,“递增”看起来像:
BigInteger result = a.add(BigInteger.ONE);
或
请注意,这两行不会更改biginger
的值,而a
最初指向该值。最后一行创建一个新的BigInteger,并将对它的引用存储在a
中
计算平方
您可以这样计算BigInteger
的平方:
BigInteger a = BigInteger.valueOf(2);
BigInteger a_square = a.multiply(a); // a^2 == a * a
或
平方根
代码取自。
它使用简单的二分法和巧妙的上界。请注意,a.shiftRight(x)
相当于a/2^x
(仅适用于非负数,但这就是我们要处理的全部内容)
使用运算符而不是方法
<>操作符重载(如C++)在java中是不可能的。< /P>你检查了类的文档吗?是的,很不幸,我没有发现关于平方的问题。BigInteger@sunny如果你看我的答案,你会发现没有必要使用专门的
square()
方法。简单乘法就行了。对不起,我是说平方根。在一个问题中解决了这个问题。你检查过这些类的文档了吗?是的,不幸的是,我没有发现关于从BigInteger@sunny如果你看我的答案,你会发现没有必要使用专门的square()
方法。简单乘法就行了。对不起,我是说平方根。在一个问题中修复了它以递增biginger
使用biginger结果=a.add(biginger.ONE)
thnk you,得到完整的结果,再加上这个平方变量biginger result=a.pow(2)
增加biginger
使用biginger结果=a.add(biginger.ONE)
thnk you,得到完整的结果,再加上这个平方变量biginger result=a.pow(2)代码>
BigInteger sqrt(BigInteger n) {
BigInteger a = BigInteger.ONE;
BigInteger b = n.shiftRight(5).add(BigInteger.valueOf(8));
while (b.compareTo(a) >= 0) {
BigInteger mid = a.add(b).shiftRight(1);
if (mid.multiply(mid).compareTo(n) > 0) {
b = mid.subtract(BigInteger.ONE);
} else {
a = mid.add(BigInteger.ONE);
}
}
return a.subtract(BigInteger.ONE);
}