programing

600851475143의 "Integer number too large" 오류 메시지

goodsources 2022. 11. 20. 12:22
반응형

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);.왜요?

60085147514332비트 정수(타입)로 나타낼 수 없습니다.int64비트 정수(타입)로 나타낼 수 있습니다.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

반응형