java中

时间:2015-11-30 22:22:28

标签: biginteger

我想知道是否有人可以帮助我,我想学习编码一段时间,我的朋友建议从java开始,因为它强大而且显然相对容易所以我买了一些书,我正在学习不同的功能和元素等。然后我偶然发现了项目euler(www.projectile.net)并认为它是学习一些新东西的一种非常有趣的方式。

我接下来要做的第三个挑战就是编写一个程序,找出最大的素数因素,即600851475143' 600851475143'这当然超出了长原始数据类型的范围。我已经编写了一个适用于任何长整数的解决方案,但是我无法使用这么大的数字运行它。

到目前为止,我的朋友一直在帮助我学习目前在国外,所以我无法问他如何处理这么大的整数,所以如果有人能帮助我理解我的解决方案。非常感激。

我在计算方面非常有文化,但我的编程经验有限,所以我很欣赏普通的英语帮助,所以我可以理解它。

提前致谢,

马克

2 个答案:

答案 0 :(得分:0)

一,&#39; 600851475143&#39;适合long。你应该没事。但是,您需要注意超出该值的算术运算的溢出,例如如果你有一个while (n*n < 600851475143)的步骤,那么在某个时候n * n会更大 - 确保它不会溢出你的工作。话虽如此,Java中的最大长度是2 ^ 63-1 ......你真的应该没问题。

二,您可以使用BigInteger来解决此数量的问题。

答案 1 :(得分:0)

我正在分享一个示例,例如我如何在for循环下使用它来查找任意数量的阶乘

    BigInteger factorial = new BigInteger("1");
   for (int i = 1; i <= n; i++) {
       factorial = factorial.multiply(new BigInteger(i + ""));
   }
   return factorial.toString();