সমস্যা বিবরণ
দুটি পূর্ণসংখ্যা dividend এবং divisor দেওয়া আছে। গুণ, ভাগ এবং মড অপারেটর ব্যবহার না করে dividend কে divisor দিয়ে ভাগ করতে হবে। ফলাফল শূন্যের দিকে কাটা হয় (truncate toward zero)।
উদাহরণ: dividend = 7, divisor = -3 হলে আউটপুট হবে -2।
সমাধানের ধাপসমূহ
- দুটি আর্গুমেন্ট x এবং y নিন (x/y)।
- যদি x < -Infinity এবং y = 1 হয়, তবে infinity রিটার্ন করুন।
- a := |x|, b := |y| এবং ans := 0 সেট করুন।
- যখন a - b >= 0:
- p := 0
- যখন a - (b << (1 << p)) >= 0: p := p + 1
- a := a - (b << p)
- ans := ans + (1 << p)
- যদি x > 0 এবং y > 0 উভয় সত্য হয়, তবে ans রিটার্ন করুন, অন্যথায় -ans রিটার্ন করুন।
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;
}
};
int main() {
Solution ob;
cout << ob.divide(40, 3);
}
ইনপুট
40 3
আউটপুট
13