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

C++ में दो नंबर जोड़ें II

मान लीजिए कि हमारे पास दो गैर-रिक्त लिंक्ड सूचियां हैं जो दो गैर-ऋणात्मक पूर्णांकों का प्रतिनिधित्व करती हैं। यहां सबसे महत्वपूर्ण अंक पहले आता है और उनके प्रत्येक नोड में एक अंक होता है। हमें दो नंबरों को एड करना है और इसे एक लिंक्ड लिस्ट के रूप में वापस करना है। इसलिए यदि सूचियाँ [7, 2, 4, 3] + [5, 6, 4] हैं, तो परिणाम [7, 8, 0, 7]

होगा।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • डमी नामक नोड बनाएं, और मान 0 स्टोर करें, स्टैक s1 और s2 बनाएं।

  • s1 को l1 के नोड्स से भरें और s2 को s2 के नोड्स से भरें।

  • योग :=0

  • जबकि s1 खाली नहीं है या s2 खाली नहीं है

    • यदि s1 खाली है, तो योग :=योग + s1 का शीर्ष मान, स्टैक s1 से हटाएं

    • यदि s2 खाली है, तो योग :=योग + s2 का शीर्ष मान, स्टैक s2 से हटाएं

    • डमी का मूल्य:=योग मॉड 10

    • नया नोड :=योग/10 के साथ एक नया नोड बनाएं

    • नए नोड के आगे :=डमी

    • डमी :=नया नोड

    • योग :=योग / 10

  • यदि डमी मान 0 है, तो डमी के आगे वापस आएं, अन्यथा डमी।

उदाहरण (C++)

एक बेहतर समझ प्राप्त करने के लिए आइए निम्नलिखित कार्यान्वयन को देखें -

#include <bits/stdc++.h>
using namespace std;
class ListNode{
   public:
   int val;
   ListNode *next;
   ListNode(int data){
      val = data;
      next = NULL;
   }
};
ListNode *make_list(vector<int> v){
   ListNode *head = new ListNode(v[0]);
   for(int i = 1; i<v.size(); i++){
      ListNode *ptr = head;
      while(ptr->next != NULL){
         ptr = ptr->next;
      }
      ptr->next = new ListNode(v[i]);
   }
   return head;
}
void print_list(ListNode *head){
   ListNode *ptr = head;
   cout << "[";
   while(ptr){
      cout << ptr->val << ", ";
      ptr = ptr->next;
   }
   cout << "]" << endl;
}
class Solution {
   public:
   ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
      ListNode* dummy;
      dummy = new ListNode(0);
      stack <ListNode*> s1, s2;
      while(l1){
         s1.push(l1);
         l1 = l1->next;
      }
      while(l2){
         s2.push(l2);
         l2 = l2->next;
      }
      int sum = 0;
      while(!s1.empty() || !s2.empty()){
         if(!s1.empty()){
            sum += s1.top()->val;
            s1.pop();
         }
         if(!s2.empty()){
            sum += s2.top()->val;
            s2.pop();
         }
         dummy->val = (sum % 10);
         ListNode* newNode = new ListNode(sum / 10);
         newNode->next = dummy;
         dummy = newNode;
         sum /= 10;
      }
      return dummy->val == 0? dummy->next : dummy;
   }
};
main(){
   vector<int> v1 = {7,2,4,3};
   ListNode *h1 = make_list(v1);
   vector<int> v2 = {5,6,4};
   ListNode *h2 = make_list(v2);
   Solution ob;
   print_list(ob.addTwoNumbers(h1, h2));
}

इनपुट

[7,2,4,3]
[5,6,4]

आउटपुट

[7, 8, 0, 7, ]

  1. C++ में दो बाइनरी स्ट्रिंग्स जोड़ने का प्रोग्राम

    बाइनरी नंबर के साथ दो स्ट्रिंग्स को देखते हुए, हमें उन दो बाइनरी स्ट्रिंग्स को जोड़कर प्राप्त परिणाम को खोजना होगा और परिणाम को बाइनरी स्ट्रिंग के रूप में वापस करना होगा। बाइनरी नंबर वे नंबर होते हैं जिन्हें या तो 0 या 1 के रूप में व्यक्त किया जाता है। 2 बाइनरी नंबर जोड़ते समय बाइनरी जोड़ नियम होता

  1. दो नंबर जोड़ने के लिए C++ प्रोग्राम

    जोड़ एक बुनियादी अंकगणितीय ऑपरेशन है। दो संख्याओं को जोड़ने का कार्यक्रम दो संख्याओं का योग करता है और उनके योग को स्क्रीन पर प्रिंट करता है। एक प्रोग्राम जो दो संख्याओं के योग को प्रदर्शित करता है, वह इस प्रकार दिया गया है - उदाहरण #include <iostream> using namespace std; int main() {  

  1. पायथन में दो नंबर जोड़ें

    मान लीजिए कि हमने दो गैर-रिक्त लिंक्ड सूचियां दी हैं। ये दो सूचियाँ दो गैर-ऋणात्मक पूर्णांक संख्याओं का प्रतिनिधित्व कर रही हैं। अंकों को उल्टे क्रम में संग्रहीत किया जाता है। उनके प्रत्येक नोड में केवल एक अंक होता है। दो नंबर जोड़ें और परिणाम को एक लिंक्ड सूची के रूप में वापस कर दें। हम यह मान रहे