The Way
C++ 음수의 나눗셈 / 나머지 본문
요약:
몫은 양수 나눗셈 기준으로 부호만 맞추어주면 되고, (나누는 두 수의 부호가 같으면 몫이 양수, 다르면 몫이 음수)
나머지는 위에서 구한 몫으로, $a = bq + r$를 만족하는 값이 된다.
--------------------------------------------------
나눗셈의 몫과 나머지는 무엇일까?
일반적으로 통용되는 정의를 따져보면, 정수 a를 0이 아닌 정수 b로 나누었을때,
$a = bq + r\;(0 \le r < |b|)$를 만족하는 수 q가 몫이고, r이 나머지이다.
이는 명백해보이지만, 음수가 들어가면 약간 애매해진다.
예를 들어서 -7을 3으로 나누면 몫과 나머지는 무엇일까?
정의에 따르면, $-7 = 3\times(-3) + 2\;(0 \le 2 < |3|)$이므로, 몫은 -3이고 나머지는 2이다.
반대로, -7을 -3으로 나누면 몫과 나머지는?
마찬가지로 정의에 따르면, $-7 = (-3)\times3 + 2\;(0 \le 2 < |-3|)$이므로, 몫은 3이고 나머지는 2이다.
하지만 C에서는 음수가 포함되었을 때, 이와 약간 다른 결과를 내놓는다. 때문에 음수가 섞이면 나눗셈이 아주 골치아파지곤 한다.
이를 한 번 정리하고 넘어가보도록 하자.
알아보기 쉽게, -10~10 사이의 정수를 3과 -3으로 나누어보자.
몫
0을 기준으로 대칭이라고 생각하면 편리하다. 양수 나누기 양수를 기준으로, 부호만 붙여주도록 결과가 나온다.
부호가 같으면 몫이 양수가 되고, 부호가 다르면 몫이 음수가 된다.
나머지
나머지 연산의 결과는 정말로.. 아리송하다.
기본적으로 양수 나머지 양수를 기준으로 한 것과 같은 값이 출력되는데, 부호가 원래 값이 음수였을 경우에는 나머지도 음수로 나온다.
어떠한 경우에서든, $a = bq + r$라는 식을 만족한다.
예를 들어 7 / -3을 하면 몫은 위에서 언급한 바와 같이 -2가 나올 것이다.
그렇다면 7 = -3 * -2 + 1이므로, 나머지는 1이 된다.
혹시라도 결정적인 상황에 헷갈리지 않으려면 알아만 놓자.
'공부 > C++ 메모사항' 카테고리의 다른 글
stdio 기본 출력 함수 속도 비교 (3) | 2019.05.14 |
---|---|
windows gdb c++ stl이 예쁘게 안 나올 때 (6) | 2018.10.13 |
lower_bound와 upper_bound (0) | 2018.05.12 |
Visual Studio 2015 C4996 에러 (scanf 사용 시) (0) | 2017.08.22 |