← 모든 알고리즘

사칙연산

덧셈·뺄셈·곱셈·나눗셈·나머지 연산과 정수 나눗셈 주의점.

Bronze
사칙연산과 나머지: 정수 나눗셈의 함정 공식

사칙연산 한눈에

연산 기호 예 (73)
덧셈 + 10
뺄셈 - 4
곱셈 * 21
나눗셈 / C++: 2, 파이썬: 2.333...
나머지 % 1

1. 정수 나눗셈 vs 실수 나눗셈

이게 초심자가 가장 많이 틀리는 부분입니다.

cout << 7 / 3 << '\n'; // 2 (정수끼리면 소수점 버림)
cout << 7.0 / 3 << '\n'; // 2.3333...
cout << (double)7 / 3 << '\n'; // 2.3333...
print(7 / 3) # 2.3333... (/는 항상 실수)
print(7 // 3) # 2 (//가 정수 나눗셈)

C++의 /는 양쪽이 정수면 소수점을 버립니다. 실수 결과가 필요하면 한쪽을
double로 만드세요. 파이썬은 반대로 /가 실수, //가 정수 나눗셈입니다.


2. 나머지 연산 %

a % bab로 나눈 나머지입니다. 활용도가 아주 높습니다.

if (n % 2 == 0) cout << "짝수\n";
else cout << "홀수\n";
  • 마지막 자리 숫자: n % 10
  • 어떤 수로 나누어떨어지는지: n % k == 0
  • 시계처럼 한 바퀴 돌리기: (i + 1) % n

3. 음수의 나눗셈 / 나머지

언어마다 음수 처리가 다릅니다.

cout << (-7) / 2 << '\n'; // -3 (0 방향으로 버림)
cout << (-7) % 2 << '\n'; // -1
print(-7 // 2) # -4 (음의 무한대 방향으로 내림)
print(-7 % 2) # 1 (결과 부호가 나누는 수를 따라감)

음수가 섞인 나머지를 쓸 땐 부호 규칙을 꼭 확인하세요. 항상 0 이상인 나머지가
필요하면 ((a % b) + b) % b 패턴을 씁니다.


4. 오버플로 주의

int a = 100000, b = 100000;
cout << a * b << '\n'; // 잘못! int 범위(약 21억) 초과
cout << (long long)a * b << '\n'; // 10^10 — 올바름

곱셈은 순식간에 int를 넘깁니다. 결과가 클 것 같으면 long long을 쓰거나
곱하기 전에 한쪽을 (long long)으로 형변환하세요. ([변수와 자료형] 참고)


5. 자주 하는 실수

  • 정수 나눗셈으로 평균이 잘림(a + b) / 2가 소수점을 버립니다.
  • 0으로 나누기b가 0일 수 있는 입력에서 a / b, a % b는 런타임 에러(예외)입니다.
  • 연산 우선순위a + b * c는 곱셈 먼저. 의도한 순서면 괄호로 (a + b) * c처럼 명확히 하세요.

연습 팁

나눗셈을 쓸 때마다 "정수로 잘려야 하나, 실수로 남아야 하나?"를 한 번
멈춰서 확인하는 습관을 들이면 사칙연산에서 나오는 실수의 절반은 사라집니다.