C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で2つの数値IIを追加する


2つの非負の整数を表す2つの空でないリンクリストがあるとします。ここでは、最上位桁が最初に来て、それらの各ノードに1桁が含まれています。 2つの数値を追加して、リンクリストとして返す必要があります。したがって、リストが[7、2、4、3] + [5、6、4]の場合、結果は[7、8、0、7]

になります。

これを解決するには、次の手順に従います-

  • ダミーと呼ばれるノードを作成し、値0を格納し、スタックs1とs2を作成します。

  • s1をl1のノードで埋め、s2をs2のノードで埋めます。

  • 合計:=0

  • s1が空でないかs2が空でない間

    • s1が空の場合、sum:=sum + s1の最上位値、スタックs1から削除

    • s2が空の場合、sum:=sum + s2の最上位値、スタックs2から削除

    • ダミーの値:=sum mod 10

    • new node:=値sum / 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++で2つのバイナリ文字列を追加するプログラム

    2進数の文字列が2つある場合、それら2つの2進数文字列を加算して得られた結果を見つけ、その結果を2進数文字列として返す必要があります。 2進数は、0または1のいずれかで表される数値です。2つの2進数を加算する際には、2進数の加算規則があります。 0+0 → 0 0+1 → 1 1+0 → 1 1+1 → 0, carry 1 入力 str1 = {“11”}, str2 = {“1”} 出力 “100” 入力 str1 = {“110”},

  2. Pythonで2つの数値を追加する

    空でないリンクリストを2つ指定したとします。これらの2つのリストは、2つの非負の整数を表しています。数字は逆の順序で保存されます。各ノードには1桁しか含まれていません。 2つの数値を加算し、結果をリンクリストとして返します。 2つの数値には、数値0自体を除いて、先行ゼロが含まれていないと想定しています。したがって、数値が120 + 230の場合、リンクリストは[0→2→1]+[0→3→2]=[0→5→3]=350になります。 これを解決するために、次の手順に従います 2つのリストl1とl2を取ります。ヘッドと温度をnullとして初期化します c:=0 l1とl2はどちらも空でないリスト