Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में दो पूर्णांकों को विभाजित करना


मान लीजिए हमारे पास दो पूर्णांक लाभांश (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

  1. C++ में दो लिंक्ड लिस्ट का इंटरसेक्शन C++ में दो लिंक्ड लिस्ट का इंटरसेक्शन

    लिंक्ड लिस्ट एक रैखिक डेटा संरचना है जिसमें प्रत्येक नोड के दो ब्लॉक होते हैं जैसे कि एक ब्लॉक में नोड का मान या डेटा होता है और दूसरा ब्लॉक अगले फील्ड का पता रखता है। मान लीजिए हमारे पास एक लिंक्ड लिस्ट है जैसे कि प्रत्येक नोड में एक रैंडम पॉइंटर होता है जो लिस्ट में अन्य नोड्स की ओर इंगित करता है।

  1. C++ में टू सम IV - इनपुट एक BST है C++ में टू सम IV - इनपुट एक BST है

    मान लीजिए हमारे पास एक बाइनरी सर्च ट्री और एक लक्ष्य मान है; हमें जांचना है कि क्या BST में दो तत्व मौजूद हैं जिनका योग दिए गए लक्ष्य के बराबर है या नहीं। इसलिए, यदि इनपुट जैसा है: तो आउटपुट True होगा। इसे हल करने के लिए, हम निम्नलिखित चरणों का पालन करेंगे: एक सरणी v परिभाषित करें एक फ़ंक्शन inor

  1. C++ में दो बाइनरी ट्री को मर्ज करना C++ में दो बाइनरी ट्री को मर्ज करना

    मान लीजिए हमारे पास दो बाइनरी ट्री हैं और जब हम एक को दूसरे पर ओवरलैप करते हैं, तो कुछ नोड्स ओवरलैप होते हैं जबकि अन्य नहीं। हमें इन्हें एक नए बाइनरी ट्री में मर्ज करना है। मर्ज का नियम यह है कि यदि दो नोड्स ओवरलैप होते हैं, तो उनके मानों को जोड़कर मर्ज किए गए नोड का नया मान बनाया जाता है। अन्यथा,