Giả sử chúng ta có hai số nguyên bị chia và số bị chia. Chúng ta phải chia hai số nguyên mà không sử dụng toán tử nhân, chia và mod. Trả lại thương số sau khi chia số bị chia cho số chia. Phép chia số nguyên phải cắt ngắn về phía không. Cả hai đầu vào đều là số nguyên
Vì vậy, nếu các đầu vào đã cho là cổ tức =7, số chia =-3, thì đầu ra sẽ là -2.
Để giải quyết vấn đề này, chúng ta sẽ làm theo các bước sau -
- Lấy hai đối số x và y, nó chỉ ra x chia cho y
- nếu x <-Infinity và y =1, thì trả về vô cùng
- a:=| x |, b:=| y | và ans:=0
- while a - b> =0
- p:=0
- while a - (dịch sang trái b (dịch sang trái 1 p lần))> =0
- p:=p + 1
- a:=a - (dịch trái b, p lần)
- ans:=ans + dịch trái 1 p lần
- nếu x> 0 đúng và y> 0 cũng đúng, thì trả về ans, ngược lại trả về (- ans)
Ví dụ (C ++)
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#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); }
Đầu vào
40 3
Đầu ra
13