godgod732   4년 전

도저히 어디서 런타임에러가 뜨는지 모르겠네요 ㅠㅠ

nahwasa   4년 전

while (key[idx] != '\0') {
   hashV = (hashV + (p*key[idx])) % MAX_TABLE;
   p *= PRIME;
   idx++;
}
에서 PRIME이 31이고,
문자열의 최대길이는 20이하입니다.
p는 int이고, 31^19는 ‭21,670,662,219,970,396,194,714,277,471‬ 입니다.

godgod732   4년 전

그게 어떤 문제를 발생시키는거죠?ㅠㅠ


어차피 오버플로로 값이 넘어가도 모듈러 연산을 취하기 때문에 정삼 범위 안에 들어오는 게 아닌가요??






nahwasa   4년 전

오버플로우가 나서 음수가 될 경우

음수 모듈로의 경우 결과도 음수로 뜹니닷.

그걸 포함해서도 정상범위에 들어오는건가요?!

거기까진 생각을 안해봐서요.


godgod732   4년 전

네 자료형 자체가 unsigned 형으로 선언되어 있어서 반환 값은 음수가 되지는 않을거에요

nahwasa   4년 전

주로 unsigned가 아예 없는 자바위주로 진행중이라 unsigned는 헷갈리는군요 ㅋㅋㅋ

https://ideone.com/jRYjXA

일단 음 ideone으로 해본걸론 음수가 뜨긴 합니다.

혹시 다른부분 있는지 다시한번 찾아볼께요!

godgod732   4년 전

출력문에 출력 자체를 %d 로 해서 음수로 나오는 것 같네요 %u 로 바꿔서 해보시면 양수값이 나올거에요!

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