Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 나눗셈(/) 연산자 없이 두 수의 몫 구하는 방법

이 튜토리얼에서는 나눗셈(/) 연산자를 사용하지 않고 두 수를 나누는 방법을 알아보겠습니다.

두 개의 숫자가 주어졌을 때, 프로그램은 나눗셈 연산의 몫(quotient)을 반환해야 합니다.

여기서는 뺄셈(-) 연산자를 반복적으로 활용하여 나눗셈을 구현합니다. 핵심 아이디어는 간단합니다. 피제수에서 제수를 계속 빼다가 피제수가 제수보다 작아지면, 그동안 뺀 횟수가 곧 몫이 됩니다.

문제 해결 접근 방식

단계별로 문제를 해결해 보겠습니다.

  • 피제수(dividend)와 제수(divisor)를 초기화합니다.

  • 피제수가 0이면 결과도 0이므로 즉시 0을 반환합니다.

  • 피제수와 제수의 부호를 확인하여 결과가 음수인지 여부를 저장합니다. 두 수의 부호가 다르면 결과는 음수입니다.

  • 몫을 셀 카운터 변수를 0으로 초기화합니다.

  • 피제수가 제수보다 크거나 같은 동안 반복되는 루프를 작성합니다.

    • 피제수에서 제수를 빼고 그 결과를 다시 피제수에 저장합니다.

    • 카운터를 1씩 증가시킵니다.

  • 루프가 끝나면 카운터 값을 출력합니다.

예제 코드

전체 코드를 살펴보겠습니다.

#include <bits/stdc++.h>
using namespace std;
int division(int num_one, int num_two) {
   if (num_one == 0) {
      return 0;
   }
   if (num_two == 0) {
      return INT_MAX;
   }
   bool negative_result = false;
   if (num_one < 0) {
      num_one = -num_one ;
      if (num_two < 0) {
         num_two = -num_two ;
      }
      else {
         negative_result = true;
      }
   }
   else if (num_two < 0) {
      num_two = -num_two;
      negative_result = true;
   }
   int quotient = 0;
   while (num_one >= num_two) {
      num_one = num_one - num_two;
      quotient++;
   }
   if (negative_result) {
      quotient = -quotient;
   }
   return quotient;
}
int main() {
   int num_one = 24, num_two = 5;
   cout << division(num_one, num_two) << endl;
   return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

4

코드 설명

위 예제에서는 24를 5로 나누므로 결과는 4입니다. 코드의 주요 로직을 정리하면 다음과 같습니다.

  • 예외 처리: 피제수가 0이면 몫은 항상 0이고, 제수가 0이면 나눗셈이 정의되지 않으므로 INT_MAX를 반환하여 오류 상황을 나타냅니다.

  • 부호 처리: 먼저 두 수의 절댓값으로 계산을 진행한 뒤, 원래 부호가 서로 달랐다면 최종 결과에 음수를 붙입니다. 이렇게 하면 양수끼리의 비교 조건(num_one >= num_two)이 올바르게 동작합니다.

  • 반복 뺄셈: 피제수가 제수 이상인 동안 계속 빼면서 카운터를 증가시키면, 그 값이 곧 몫이 됩니다.

참고로 이 방법의 시간 복잡도는 O(몫)입니다. 몫이 매우 클 경우 성능이 저하될 수 있으며, 이를 개선하려면 비트 시프트를 활용한 배수 감산 기법을 사용할 수 있습니다.

마무리

이번 튜토리얼에서는 뺄셈 연산만으로 나눗셈을 구현하는 방법을 배웠습니다. 내용에 대해 궁금한 점이 있다면 댓글로 남겨주세요.