두 개의 정수 피제수와 제수가 있다고 가정합니다. 곱셈, 나눗셈, 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