그때그때 모듈러연산을 한다고 오버플로우가 발생하지 않는 것이 아닙니다.
int의 범위는 2,147,483,647까지이고,
for (int j=1; j<=i; j++)
{
q *= 31;
q %= M;
}
에서 M은 1,234,567,891이므로
q%=M은 1,234,567,890까지 가능합니다.
여기서 q*=31을 하면 38,271,604,590으로 이미 int의 표현 범위를 넘어 오버플로우가 발생하게 됩니다.
15829번 - Hashing
그때그때 모듈러연산을 한다고 오버플로우가 발생하지 않는 것이 아닙니다.
int의 범위는 2,147,483,647까지이고,
for (int j=1; j<=i; j++)
{
q *= 31;
q %= M;
}
에서 M은 1,234,567,891이므로
q%=M은 1,234,567,890까지 가능합니다.
여기서 q*=31을 하면 38,271,604,590으로 이미 int의 표현 범위를 넘어 오버플로우가 발생하게 됩니다.
댓글을 작성하려면 로그인해야 합니다.
hyjin1117 1년 전
long 써서 100점 맞긴 했는데
이거 int로만 해서 풀 수 있을 것 같은데
테스트 케이스로
40 짜리
aaaaaaaaaasssssssssszzzzzzzzzzkkkkkkkkkk
하면 음수 나오긴 합니다
근데 제 코드에서 왜 오버플로우 나는지 잘 모르겠어요
모듈러 연산 그때그때 해주는데