我正在使用java并且必须处理大于long的数字(64位)。我该怎么用? java中BigInteger的大小是多少?
答案 0 :(得分:19)
正如您在问题中提到的,您应该使用BigInteger。
它们可以根据您的需要大小 - 直到内存不足为止。
答案 1 :(得分:3)
java中BigInteger的大小是多少?
这有点棘手。问题是javadocs中没有明确的限制规范。
该课程使用int[]
来表示幅度。这意味着它可能代表最多((2^32)^(2^31 - 1)
的数字。
API有一个方法,它将数字作为2的补码字节数组返回。限制为((2^8)^(2^31 - 1)
。
API有另一种方法,以位为单位返回数字的大小......作为int
。这意味着2^(2^31 - 1)
或2^(2^32)
的限制。
实际上,这些数字都很大,以至于你可能首先遇到堆空间限制(或CPU性能限制)。
问题是我必须找出数字的平方根。
您应该能够在本科数学课本(或维基百科)中找到计算平方根的算法。编码应该是一项简单的任务。
(我会指出你的示例代码,除了这有点像“家庭作业”,我并不完全信任我找到的代码。)
不要忘记大多数整数都有一个不合理的平方根......
答案 2 :(得分:2)
你正在寻找BigDecimal类,或者你只需要整数,而不是BigInteger。它的任意精度,因此大小会根据您输入的数字大小而变化
答案 3 :(得分:0)
要查找BigInteger的平方根,您必须使用“-StackOverflow”答案进行谷歌搜索。 https://www.google.com/search?q=java+extract+root+bignum&ie=utf-8&oe=utf-8#q=java+root+BigInteger+-stackoverflow.com+-stackexchange.com生成http://faruk.akgul.org/blog/javas-missing-algorithm-biginteger-sqrt/的第一个链接。这是一种算法。 Java应该是“一次编写,随处使用”。好吧,一些SO用户认为你必须重新发明轮子。向他们询问他们回答的模块“闻起来像家庭作业,自己做”。是的,BigInteger已经半生不熟了。它无法做到对数或开箱即用。这非常慢。算法如下。
BigInteger sqrt(BigInteger n) {
BigInteger a = BigInteger.ONE;
BigInteger b = new BigInteger(n.shiftRight(5).add(new BigInteger("8")).toString());
while(b.compareTo(a) >= 0) {
BigInteger mid = new BigInteger(a.add(b).shiftRight(1).toString());
if(mid.multiply(mid).compareTo(n) > 0) b = mid.subtract(BigInteger.ONE);
else a = mid.add(BigInteger.ONE);
}
return a.subtract(BigInteger.ONE);
}
答案 4 :(得分:-2)
import java.util.Scanner; import java.math.BigDecimal;
公共课Ha40 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
long d=scan.nextLong();
String st=" ";
st=scan.next();
st+= scan.nextLine();
// Write your code here.
System.out.println("String: " + st);
System.out.println("Double: " + d);
System.out.println("Int: " + i);
}
}
输入是:2147483647 235345345345.234534 fsdfsdf sdf但是ans没有达到标记