tiro25   4년 전

해결은 했는데 첨부한 코드에서 주석이 있는 부분 i를 int형으로 하면 런타임에러가 나오는데요

max가 1조1백만이니까 i가 최대일 때여도 int범위를 벗어나지 않는다고 생각했었는데 왜 int형이 안되는지 설명해주실수 있으신가요?

nahwasa   4년 전

int형 최대범위는 약 21억까지입니다.

2147483647

tiro25   4년 전

네 int 최대가 약 21억이니까 그 제곱은 약 4*10^18이어서 문제에서 주어진 max의 최대인 1조1백만을 표현하는데는 문제가 없다고 생각했어요

밑에서 n이 long long형이어서 while문의 조건식에서도 자동형변환된다고 생각했고요

nahwasa   4년 전

일단 위 조건문에서 i*i 이 먼저 연산되고 오버플로우가 난 상태로 비교됩니다.

아래도 n은 longlong이지만 (i*i)에서 일단 오버플로우 난 상태로 형변환되게 됩니다.

astein   4년 전

13번째 라인에서 문제가 될 수 있어 보입니다.

long long n = (min-1) / (i*i) + 1;

우측의 (i*i) 의 값이 음수가 나올 수 있습니다.


nahwasa   4년 전

long long n = (long long) / (int*int) + 1;

long long n = long long

이렇게 되는데 애초에 (int*int)에서 먼저 오버플로우라 쓰레기값이 되는거죵!

댓글을 작성하려면 로그인해야 합니다.