Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 두 정수 나누기


두 개의 정수 피제수와 제수가 있다고 가정합니다. 곱셈, 나눗셈, mod 연산자를 사용하지 않고 두 정수를 나누어야 합니다. 피제수를 제수로 나눈 몫을 반환합니다. 정수 나누기는 0으로 잘려야 합니다. 두 입력 모두 정수입니다.

따라서 주어진 입력이 피제수 =7, 제수 =-3이면 출력은 -2가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • x와 y 두 인수를 취하면 x가 y를 나눕니다.
  • x <-무한대이고 y =1이면 무한대를 반환합니다.
  • a :=|x|, b :=|y| 및 ans :=0
  • 동안 a – b>=0
    • p :=0
    • 동안 a – (왼쪽으로 이동 b (왼쪽으로 1p 이동))>=0
      • p :=p + 1
    • a :=a – (왼쪽 시프트 b, p번)
    • ans :=ans + 왼쪽 시프트 1p 번
  • x> 0이 참이고 y> 0도 참이면 ans를 반환하고, 그렇지 않으면 (–s)를 반환합니다.

예(C++)

더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
public:
   int divide(int l, int y) {
      if(l <= INT_MIN && y == -1)return INT_MAX;
      lli a = labs(l);
      lli b = labs(y);
      lli ans = 0;
      while(a-b >= 0){
         int x = 0;
         while(a-(b << 1 << x) >= 0){
            x++;
         }
         a -= b<<x;
         ans += 1<<x;
      }
      return (l>0)== (y>0)?ans:-ans;
   }
};
main(){
   Solution ob;
   cout << ob.divide(40, 3);
}

입력

40
3

출력

13