मान लीजिए कि हमारे पास दो पूर्णांक लाभांश और भाजक हैं। हमें दो पूर्णांकों को गुणा, भाग और मॉड ऑपरेटर का उपयोग किए बिना विभाजित करना होगा। भाज्य को भाजक से भाग देने के बाद भागफल लौटाएँ। पूर्णांक विभाजन शून्य की ओर छोटा होना चाहिए। दोनों इनपुट पूर्णांक हैं
अतः यदि दिए गए इनपुट लाभांश =7, भाजक =-3 हैं, तो आउटपुट -2 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- दो तर्क x और y लेते हुए यह इंगित करता है कि x, y को विभाजित करता है
- अगर x <-इन्फिनिटी और y =1 है, तो रिटर्न इनफिनिटी
- a :=|x|, b :=|y| और उत्तर :=0
- जबकि a - b>=0
- p :=0
- जबकि ए - (बाएं स्थानांतरित बी (बाएं 1 पी बार स्थानांतरित)> =0
- p :=p + 1
- a :=a – (बाएं शिफ्ट b, p बार)
- Ans :=ans + लेफ्ट शिफ्ट 1 p बार
- यदि x> 0 सत्य है और y> 0 भी सत्य है, तो उत्तर दें, अन्यथा वापस लौटें (- उत्तर)
उदाहरण(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