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