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

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


मान लीजिए कि हमारे पास दो पूर्णांक लाभांश और भाजक हैं। हमें दो पूर्णांकों को गुणा, भाग और मॉड ऑपरेटर का उपयोग किए बिना विभाजित करना होगा। भाज्य को भाजक से भाग देने के बाद भागफल लौटाएँ। पूर्णांक विभाजन शून्य की ओर छोटा होना चाहिए। दोनों इनपुट पूर्णांक हैं

अतः यदि दिए गए इनपुट लाभांश =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

  1. C++ में दो लिंक्ड सूचियों का प्रतिच्छेदन

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

  1. दो योग IV - इनपुट C++ में एक BST है

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

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

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