问题:我无法存储数字“600851475143”。我意识到这个数字大于 int 可以容纳的数字并且小于最大 long 值。但是,我的程序没有将变量“number”注册为 long,而是将其注册为 int。有人可以阐明这个问题吗?
** - 问题所在
public class Problem3{
//What is the largest prime factor of the number 600851475143
public static void main(String[] args){
***long number = 600851475143 , total = 0;
for(long x = (number-1)/2; x>1; x--)
if(number%x == 0 && isPrime(x)) total += x;
System.out.println(total);
}
private static boolean isPrime(long determine){
for(long x = determine/2 - 1; x>1; x--)
if(determine%x ==0) return false;
return true;
}
解决方案:正如吉姆在下面所说的,为了输入 long 类型,必须在数字的末尾加上“L”或“l”。 "一个整型字面量,如果以字母L或l结尾,则为long类型;否则为int类型。建议使用大写字母L,因为小写字母l与数字1难以区分” - 来自关于原始类型的 Oracle 站点。
最佳答案
长字面值需要在尾部加上“L”表示,如600851475143L
关于Java 误认为原始数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10559860/