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

दो संख्याओं को गुणा करने का सबसे तेज़ तरीका


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

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

मान लें कि Xबायाँ और Xदाएँ पहले नंबर X के दो भाग हैं, और Yleft, Yright दूसरे नंबर Y के दो भाग हैं। तो उत्पाद;

दो संख्याओं को गुणा करने का सबसे तेज़ तरीका

इसे आसान बनाने के लिए, हम यह ऑपरेशन कर सकते हैं

दो संख्याओं को गुणा करने का सबसे तेज़ तरीका


इनपुट और आउटपुट

इनपुट:दो बाइनरी नंबर:1101 और 0111आउटपुट:परिणाम है:91

एल्गोरिदम

addBitString(num1, num2)

इनपुट: जोड़ने के लिए दो नंबर।

आउटपुट: जोड़ने के बाद परिणाम।

<पूर्व>संख्या1 और अंक2 की लंबाई समायोजित करना शुरू करें:=num1 कैरी की लंबाई:=0 i के लिए:=लंबाई -1 से 0 तक, num1Bit करें:=num1[i] num2Bit:=num2[i] sum:=num1Bit XOR num2Bit XOR कैरी फ़ाइनलसम:=योग + फ़ाइनलसम कैरी:=(num1Bit और num2Bit) या (num2Bit और कैरी) या (num1Bit और कैरी) अगर 0 ले जाए, तो फ़ाइनलसम:=1 + फ़ाइनलसम रिटर्न फ़ाइनलसमएंड

गुणा करें(num1, num2)

इनपुट: गुणा करने के लिए दो संख्याएँ।

आउटपुट: गुणन के बाद का परिणाम।

<पूर्व>संख्या1 और अंक2 की लंबाई समायोजित करना शुरू करें:=num1 की लंबाई अगर n =0 है, तो 0 अगर n =1 है, तो वापस लौटें (num1[0] * num2[0]) firstHalf :=n/2 secondHalf :=(n - फ़र्स्टहाफ़) n1Left:=num1 n1Right से (0 से फ़र्स्टहाफ़) का सबस्ट्रिंग:=num1 n2Left से (फर्स्टहाफ से सेकेंडहाफ) का सबस्ट्रिंग:=num2 n2Right से (0 से फर्स्टहाफ) का सबस्ट्रिंग:=सबस्ट्रिंग (फर्स्टहाफ से सेकेंड हाफ तक) ) num2 p1 से:=गुणा करें(n1Left, n2Left) p2:=गुणा करें(n1Right, n2Right) add1:=addBitString(n1Left, n1Right) add2:=addBitString(n2Left, n2Right) p3 :=गुणा करें (add1, add2) mask1 =2*सेकेंडहाफ बिट्स मास्क2 के लिए 1 को बाईं ओर शिफ्ट करें:=सेकेंड हाफ बिट्स के लिए 1 को बाईं ओर शिफ्ट करें P1*mask2 + (p3 - p1 - p2)*mask2 + p2End लौटाएं

उदाहरण

#include नेमस्पेस का उपयोग करके std;int lengthAdjust(string &num1, string &num2) {// बाइनरी स्ट्रिंग की लंबाई समायोजित करें और स्ट्रिंग की लंबाई भेजें int len1 =num1.size (); int len2 =num2.size (); if (len1  len2) { के लिए (int i =0; i =0; i--) { int num1Bit =num1[i] - '0'; int num2Bit =num2[i] - '0'; इंट सम =(num1Bit ^ num2Bit ^ कैरी)+'0'; // हम योग जानते हैं =ए एक्सओआर बी एक्सओआर सी फाइनलसम =(चार) योग + फाइनलसम; // कैरी =(ए और बी) या (बी और सी) या (सी और ए) कैरी =(num1Bit&num2Bit) | (num2बिट और कैरी) | (संख्या 1 बिट और कैरी); } अगर (कैरी) // जब कैरी मौजूद हो तो finalSum ='1' + finalSum; // MSb रिटर्न फाइनलसम के रूप में कैरी जोड़ें;} लॉन्ग इंट मल्टीप्लाई (स्ट्रिंग num1, स्ट्रिंग num2) {int n =lengthAdjust (num1, num2); // उन्हें समायोजित करने के बाद लंबाई पाएं अगर (एन ==0) // जब 0 लंबाई स्ट्रिंग होती है, तो 0 रिटर्न 0 लौटाएं; अगर (एन ==1) वापसी (संख्या 1 [0] - '0') * (संख्या 2 [0] - '0'); // एकल बिट गुणन करें int firstHalf =n/2; // फर्स्ट हाफ रेंज इंट सेकेंड हाफ =(एन-फर्स्ट हाफ); // सेकेंड हाफ रेंज स्ट्रिंग num1Left =num1.substr(0, firstHalf); // नंबर 1 स्ट्रिंग की पहली छमाही num1Right =num1.substr (फर्स्टहाफ, सेकेंड हाफ); // नंबर 1 स्ट्रिंग का दूसरा भाग num2Left =num2.substr(0, firstHalf); स्ट्रिंग num2Right =num2.substr (फर्स्टहाफ, सेकेंड हाफ); // बाएँ दाएँ गुणन का पता लगाएं, और बाएँ और दाएँ भाग को जोड़ने के बाद गुणा करें long int P1 =गुणा करें (num1Left, num2Left); लॉन्ग इंट P2 =गुणा करें (num1Right, num2Right); लंबी int P3 =गुणा (addBitStrings (num1Left, num1Right), addBitStrings (num2Left, num2Right)); वापसी P1*(1<<(2*secondHalf)) + (P3 - P1 - P2)*(1<> num1; cout <<"बाइनरी में दूसरा नंबर दर्ज करें:"; सिनेमा>> num2; cout <<"परिणाम है:" <<गुणा (num1, num2);}

आउटपुट

बाइनरी में पहला नंबर दर्ज करें:1101बाइनरी में दूसरा नंबर दर्ज करें:0111परिणाम है:91

  1. जावास्क्रिप्ट में दो नंबर लेकर पूर्णांकों की तुलना करना

    हमें एक जावास्क्रिप्ट फ़ंक्शन लिखना है जो दो नंबर लेता है, मान लीजिए num1 और num2। अगर num1, num2 से बड़ा है, तो हमारा फंक्शन और बड़ा होना चाहिए। अगर num2 num1 से बड़ा है, तो हमारा फंक्शन छोटा होना चाहिए। अन्यथा, फ़ंक्शन बराबर लौटना चाहिए। उदाहरण निम्नलिखित कोड है - const compareIntegers

  1. जावास्क्रिप्ट में दो संख्याओं के कम से कम सामान्य गुणक की गणना करने का कार्य

    दो पूर्णांकों a और b का लघुत्तम समापवर्तक, (LCM), सबसे छोटा धनात्मक पूर्णांक है जो a और b दोनों से विभाज्य है। उदाहरण के लिए - 4 और 6 का LCM 12 है क्योंकि 12 सबसे छोटी संख्या है जो 4 और 6 दोनों से पूर्णतः विभाज्य है। हमें एक जावास्क्रिप्ट फ़ंक्शन लिखना है जो दो नंबर लेता है, गणना करता है और उन न

  1. जावास्क्रिप्ट में दो नंबर जोड़ते समय आवश्यक कैरी की संख्या

    समस्या हमें एक जावास्क्रिप्ट फ़ंक्शन लिखना है जो दो नंबर लेता है। हमारे फ़ंक्शन को उन नंबरों को जोड़ने के लिए आवश्यक कैरी की संख्या की गणना करनी चाहिए जैसे कि हम उन्हें कागज पर जोड़ रहे थे। जैसे नीचे दी गई इमेज में 179 और 284 को जोड़ते समय हमने दो बार कैर्री का इस्तेमाल किया था, इसलिए इन दो नंबरो