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

C++での2つの大きな数の合計


この問題では、2つの大きな数を定義する2つの文字列が与えられます。私たちの仕事は、2つの大きな数の合計を見つけるプログラムを作成することです。

問題を理解するために例を見てみましょう

Input: number1 = “341299123919”
number2 = “52413424”
Output: 341351537343

この問題を解決するために、両方の文字列をトラバースします。そして、桁ごとに追加し、キャリーを伝播します。そして、結果を1桁ずつ保存して文字列を合計します。

アルゴリズム

Initialize sum = 0, carry = 0.
Step 1: loop from n to 0.
Step 1.1: intSum = number1[i] + number2[i]
Step 1.2: carry = intSum/10. Sum += intSum
Step 2: sum += carry.
Step 3: return sum.

ソリューションの動作を説明するプログラム

#include<bits/stdc++.h>
using namespace std;
string addBigNumbers(string number1, string number2) {
   if (number1.length() > number2.length())
    swap(number1, number2);
   string sum = "";
   int len1 = number1.length();
   int len2 = number2.length();
   int digitDiff = len2 - len1;
   int carry = 0;
   int intSum;
   for (int i=len1-1; i>=0; i--) {
      intSum = ((number1[i]-'0') + (number2[i+digitDiff]- '0') + carry);
      sum.push_back(intSum%10 + '0');
      carry = intSum/10;
   }
   for (int i=digitDiff-1; i>=0; i--) {
      intSum = ((number2[i]-'0')+carry);
      sum.push_back(intSum%10 + '0');
      carry = intSum/10;
   }
   if (carry)
    sum.push_back(carry+'0');
   reverse(sum.begin(), sum.end());
   return sum;
}
int main() {
   string number1 = "235235823852";
   string number2 = "45230820348";
   cout<<"Sum of two large numbers is "<<addBigNumbers(number1,x number2);
   return 0;
}
出力
Sum of two large numbers is 280466644200



  1. C++のNより下の2つの数値の倍数の合計

    この問題では、3つの整数M1、M2、およびNを指定しました。私たちのタスクは、Nの下の2つの数値の倍数の合計を見つけるプログラムを作成することです。 ここでは、M1またはM2の倍数であるNの下のすべての要素を追加します 問題を理解するために例を見てみましょう 入力 N = 13, M1 = 4, M2 = 6 出力 20 説明 − 13未満の4と6の倍数である数は、4、6、8、12です。 この問題の簡単な解決策は、1からNにループし、M1またはM2で除算できるすべての値を追加することです。 アルゴリズム ステップ1 − sum =0、i=0。i=1からNにループします。

  2. TwoSumIV-入力はC++のBSTです

    二分探索木と1つのターゲット値があるとします。合計が指定されたターゲットと等しくなるように、BSTに2つの要素が存在するかどうかを確認する必要があります。 したがって、入力が次のような場合 その場合、出力はTrueになります。 これを解決するには、次の手順に従います- 配列を定義するv 関数inorder()を定義します。これはルートになります ルートがnullの場合、- 戻る 順序なし(ルートの左側) ルートの値をvに挿入 順序なし(ルートの左側) 関数findnode()を定義します。これにはkがかかります n:=vのサ