600851475143의 "Integer number too large" 오류 메시지
public class Three {
public static void main(String[] args) {
Three obj = new Three();
obj.function(600851475143);
}
private Long function(long i) {
Stack<Long> stack = new Stack<Long>();
for (long j = 2; j <= i; j++) {
if (i % j == 0) {
stack.push(j);
}
}
return stack.pop();
}
}
위의 코드가 실행되면 회선에 오류가 발생합니다.obj.function(600851475143);
.왜요?
600851475143
32비트 정수(타입)로 나타낼 수 없습니다.int
64비트 정수(타입)로 나타낼 수 있습니다.long
). Java의 긴 리터럴은 "L"로 끝납니다.600851475143L
서픽스 추가L
:23423429L
.
기본적으로는 Java는 모든 숫자 리터럴을 32비트 정수 값으로 해석합니다.32비트 정수보다 큰 것을 명확하게 지정하려면 접미사를 사용해야 합니다.L
장기의 가치를 위해.
긴 리터럴을 사용해야 합니다.
obj.function(600851475143l); // note the "l" at the end
다만, 그 기능은 메모리(또는 시간)가 부족할 것으로 예상됩니다.
Java 컴파일러는 기본적으로 600851475143을 type int의 상수값으로 해석하려고 합니다.이로 인해 600851475143은 int로 표시할 수 없기 때문에 오류가 발생합니다.
컴파일러에 숫자 인터프리트를 길게 할 것을 지시하려면 다음 중 하나를 추가해야 합니다.l
또는L
그 다음에.그러면 번호는 다음과 같습니다.600851475143L
.
일부 글꼴은 "1"과 "l"을 구분하기 어렵기 때문에 항상 "L" 대소문자를 사용해야 합니다.
정수 리터럴 600851475143을 나타내려면 40비트가 필요합니다.Java의 경우 최대 정수 값은 2^31-1이지만(정수는 32비트입니다), http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html) 를 참조해 주세요.
이건 이 일과 아무 관련이 없어function
. 대신 긴 정수 리터럴을 사용해 보십시오(다른 답변에서 제안됨).
컴파일 시 숫자 "600851475143"은 32비트 정수로 표시됩니다.이 문제를 해결하려면 번호 끝에 있는 롱 리터럴을 사용해 보십시오.
다른 모든 답변과는 별도로 할 수 있는 것은 다음과 같습니다.
long l = Long.parseLong("600851475143");
예를 들어 다음과 같습니다.
obj.function(Long.parseLong("600851475143"));
또는 입력번호가 길다고 선언하고 tango:D라는 코드를 실행할 수 있습니다.
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Enter a number");
long n = in.nextLong();
for (long i = 2; i <= n; i++) {
while (n % i == 0) {
System.out.print(", " + i);
n /= i;
}
}
}
언급URL : https://stackoverflow.com/questions/3757763/integer-number-too-large-error-message-for-600851475143
'programing' 카테고리의 다른 글
문자열이 무엇으로 시작되는지 확인하시겠습니까? (0) | 2022.11.20 |
---|---|
WAMP/MySQL 오류가 올바른 언어로 표시되지 않음 (0) | 2022.11.20 |
카운트(*)를 해야 하나요, 말아야 하나요? (0) | 2022.11.20 |
실제로 Python 3.3에서 "유효율" 구문의 주요 용도는 무엇입니까? (0) | 2022.11.20 |
휴지 상태 오류: org.hibernate.NonUniqueObjectException: 동일한 식별자 값을 가진 다른 개체가 세션에 이미 연결되어 있습니다. (0) | 2022.11.20 |