mk_6308am   3년 전

문제를 맞추긴 한 상태인데 이론과 실제 결과가 일치하지가 않는 부분이 있어서 질문드립니다.

비트 연산에서 보면 64bit 혹은 32 bit 이내의 이진수들은 아무리 오버플로우가 발생해도 보존되는 것으로 이해하고 있습니다.

그러면 10억 이내에 해당하는 bit들도 오버플로우 여부와 상관없이 계속 보존될텐데,

INT_MAX > 10억이고, 답에서 원하는 건 10억 이내의 bit 값들이므로, int sum  혹은 unsigned int sum 에다가 최종 결과를 계속 더해주고 마지막에 printf("%u", (sum % 10억)) 을 출력해도 결과가 동일해야 하지 않나 궁금하네요.

감사합니다.



sait2000   3년 전

오버플로우로 잘려나가는 부분이 10억의 배수가 아니라서 문제가 생깁니다.

십진법으로 예를 들어 설명하면, 35 + 76을 3으로 나눈 나머지를 계산한다고 할 때 십의 자리까지만 남겨서 계산한다고 합시다. 그러면 실제로 더하면 111인데 100이 잘려나가서 11만 남습니다. 그래서 3으로 나눈 나머지가 0이 나와야 하는데 2가 나옵니다.

하지만 만약 4로 나눈 나머지를 계산한다고 하면 100은 4의 배수이기 때문에 111로 계산하든 11로 계산하든 나머지가 3이 나옵니다.

mk_6308am   3년 전

깔끔한 답변 감사합니다~!

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