>
int getCycleLen(int n){//counts the number of iterations before n=1
    int cycle_len=0;
    while(n!=1){
        if(n%2==0) n/=2; else n=3*n+1;
        cycle_len++;
    }
    return cycle_len;
}
int main(){
    int i,j,n;
    int max_len=0,len;
    i = 1; j = 1000000;//j = a million
    for(n=i;n<=j;n++){
        printf("%d ",n);
        len = getCycleLen(n);
        if(len > max_len)
            max_len=len;
    }
    printf("%d %d %d\n",i,j,max_len);
}

우분투 16.04를 사용하고 gcc 5.4를 사용하여 컴파일하고 있습니다. 어떤 이유로 for 루프의 n이 113299 일 때 프로그램이 중단됩니다. 왜 이런 일이 발생했는지에 대한 제안이 있으십니까?


  • 답변 # 1

    이것은 정수 오버플로입니다. long 사용   getCycleLen 에 대한 매개 변수  대신

    n 의 모든 값을 인쇄하면 직접 확인할 수 있습니다  당신이 getCycleLen 에서 반복으로 . 숫자가 너무 커서 int 에 맞지 않을 때 초과되고 음수가됩니다. 음수는 1에 수렴되지 않습니다.

    integer

    C에서 정수에는 특정 제한이 있습니다. 이 제한은 시스템 아키텍처에 따라 다릅니다. 그러나 기본적으로 귀하의 값은 정수에 저장된 최대 가능한 값을 초과했습니다.

  • 이전 dart - 설레다 - 키보드가 나타나지 않고 선택한 필드 아래에 있지 않습니다
  • 다음 itext - 기음# - itextsharp 문서에 페이지가 없습니다