मान लीजिए हमारे पास दो पूर्णांक लाभांश (dividend) और भाजक (divisor) हैं। हमें गुणा, भाग और मोड ऑपरेटर का उपयोग किए बिना दो पूर्णांकों को विभाजित करना है। लाभांश को भाजक से विभाजित करने के बाद भागफल लौटाएं। पूर्णांक विभाजन शून्य की ओर काट दिया जाना चाहिए। दोनों इनपुट पूर्णांक हैं।
तो यदि दिए गए इनपुट हैं लाभांश = 7, भाजक = -3, तो आउटपुट -2 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- दो तर्क x और y लेना जो दर्शाता है x, y को विभाजित करता है
- यदि x < -Infinity और y = 1, तो अनंत लौटाएं
- 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; } }; main(){ Solution ob; cout << ob.divide(40, 3); }इनपुट
40 3
आउटपुट
13