2011-09-27 117 views
0

我试图比较大数以至于BigIntegers无法处理它们的数字。我的解决方案是将数字转换为字符串,并使用字符串比较。将大数字转换为字符串格式进行比较

这项工作?我不确定如何实现这样的事情。我只是试图对一个算法进行单元测试,以产生一个项目Euler程序的阶乘1000,这个项目我被吸收进去了。

+0

你有BigIntegers,这是没有可比性的一些示例代码?为什么它不适用于Strings?如果只有一个字符串以“ - ”开头,则这个更小。如果两者均为正值,则较短的字符串较小,如果两者均为负值则较长。否则从左边逐个比较它们。 –

+0

你的号码有多大? 1000!似乎有大约2568位数字,这应该不是问题 – Henry

+0

最大的数字将是1000!,是的。是否会扩大BigInteger满足要求? –

回答

1

你的假设是错误的。

BigInteger提供了任意精度,所以它绝对可以处理这么大的数字。

尝试以下操作:

public class Main { 
    public static void main(String[] args) { 
     BigInteger thousand = BigInteger.valueOf(1000L); 
     for (int i = 999; i > 0; i--) 
     { 
      thousand = thousand.multiply(BigInteger.valueOf(i)); 
     } 

     System.out.println(thousand.toString()); 
    } 

} 
+0

真的吗?我读过BigInteger的上限比这个小得多。你说这个限制是任意的,它是否扩展以满足用户需求?你认为这将是测试我的代码的最佳方式吗? –

+0

BigInteger使用符号量级编码(http://en.wikipedia.org/wiki/Signed_number_representations#Sign-and-magnitude_method)和int []来存储大小。 Java中一个数组的最大长度是2147483647. 这很大(除非我的数学错误,大概是2 ^(32 * 2147483647))。 –

相关问题