大于long的数字.MAX_VALUE

时间:2014-05-19 10:08:39

标签: java

我只是想知道什么是最好的存储一个非常大的整数,如果有多个选项,它的优点和缺点与其他选项相比。

我想存储和使用此值:

116738484849595836625273748485838625252737485884625292837367283849484726373884848484636377473636252626736363636637373747

4 个答案:

答案 0 :(得分:5)

对任意长度的整数使用BigInteger

答案 1 :(得分:2)

使用具有预定义数学函数的BigInteger形式java.math包。

这是JavaDoc Link

的参考

答案 2 :(得分:1)

如果仅针对整数,我建议您查看java.math.BigInteger。 它具有String的构造函数,使您可以使用任意(当然是内存有限)长度的整数并执行基本的代数运算。

但是:这也取决于你定义为“正常工作”。 也许只是构建一个该值的String也满足您的要求。

答案 3 :(得分:1)

如果您想根据其字符串表示分析数字,我会将其保留为字符串。使用BigInteger做同样的事情要困难得多。

public static void main(String... ignored) {
    String s = "116738484849595836625273748485838625252737485884625292837367283849484726373884848484636377473636252626736363636637373747";
    NavigableSet<String> set = new TreeSet<>();
    for(int i=0;i<s.length();i++)
        set.add(s.substring(i));
    String prev = "", longest = "";
    for (String t : set) {
        int len = startMatchingLength(prev, t);
        if (len > longest.length())
            longest = t.substring(0, len);
        prev = t;
    }

    System.out.println("Longest match was " + longest);
}

public static int startMatchingLength(String s, String t) {
    for (int i = 0; i < s.length() && i < t.length();i++)
        if (s.charAt(i) != t.charAt(i))
            return i;
    return Math.min(s.length(), t.length());
}

打印

Longest match was 25273748