C++で2つの配列の要素ごとの合計を桁に分解して新しい配列に格納する方法
このチュートリアルでは、2つの配列の対応する要素同士を加算し、その結果を別の配列に格納するC++プログラムの作成方法を解説します。
2つの配列が与えられ、同じインデックスの要素を足し合わせていきます。合計が2桁以上の数値になった場合は、その数値を桁ごとに分解し、1桁ずつ新しい配列に格納するのがポイントです。
まずは具体例を見てみましょう。
入力例
arr_one = {1, 2, 32, 4, 5}
arr_two = {1, 52, 3}出力例
2 5 4 3 5 4 5
この例では、1+1=2、2+52=54(→「5」「4」に分解)、32+3=35(→「3」「5」に分解)となり、残りの要素4と5はそのまま格納されています。
解決手順
問題を解くための手順は以下の通りです。
- 2つの配列をダミーデータで初期化します。
- 新しい配列のサイズが事前にわからないため、結果の格納にはvectorを使用します。
- インデックスが両方の配列の長さ未満である間、2つの配列を同時に反復処理します。
- 対応するインデックスの要素を加算し、桁に分解して新しい配列に格納します。
- 上記の反復処理が完了した後、長い方の配列に残った要素を個別に処理します。
- vectorの要素を出力します。
コード例
それでは、実際のコードを見てみましょう。
#include <bits/stdc++.h>
using namespace std;
void pushDigits(int num, vector<int> &result) {
if (num > 0) {
pushDigits(num / 10, result);
result.push_back(num % 10);
}
}
void printVector(vector<int> &result) {
for (int i : result) {
cout << i << " ";
}
cout << endl;
}
void addTwoArrayElements(vector<int> arr_one, vector<int> arr_two) {
vector<int> result;
int arr_one_length = arr_one.size(), arr_two_length = arr_two.size();
int i = 0;
while (i < arr_one_length && i < arr_two_length) {
pushDigits(arr_one[i] + arr_two[i], result);
i++;
}
while (i < arr_one_length) {
pushDigits(arr_one[i++], result);
}
while (i < arr_two_length) {
pushDigits(arr_two[i++], result);
}
printVector(result);
}
int main() {
vector<int> arr_one = {1, 2, 32, 4, 5};
vector<int> arr_two = {1, 52, 3};
addTwoArrayElements(arr_one, arr_two);
return 0;
}コードの解説
- pushDigits関数: 数値を再帰的に処理し、各位の数字を結果のvectorの末尾に追加します。再帰呼び出しが先に行われるため、上位の桁から順に格納される仕組みです。
- addTwoArrayElements関数: 2つの配列を同時に走査して対応する要素を加算した後、サイズが異なる場合に備えて、残りの要素をそれぞれ個別に処理します。
- printVector関数: 結果のvectorの全要素をスペース区切りで出力します。
出力
上記のプログラムを実行すると、次の結果が得られます。
2 5 4 3 5 4 5
まとめ
このチュートリアルでは、2つの配列の要素ごとの合計を求め、2桁以上の数値を桁に分解して新しい配列に格納する方法を学びました。vectorを活用することで、結果のサイズが事前にわからない場合でも柔軟に対応できます。チュートリアルの内容について質問がある場合は、コメント欄でお気軽にお知らせください。
-
C++で2つの未ソート配列をマージしてソート済みの新しい配列を作成する方法
問題の概要本記事では、2つのソートされていない(未ソート)配列を受け取り、それらを1つの新しい配列にマージしたうえで、昇順にソートされた結果を返す関数をC++で実装する方法を解説します。具体的な入力と期待される出力は以下の通りです。arr1[] = {10, 5, 7, 2} arr2[] = {4, 17, 9, 3} result[] = {2, 3, 4, 5, 7, 9, 10, 17}アルゴリズム実装のアプローチは非常にシンプルで、次の2ステップで構成されます。2つの未ソート配列を1つの新しい配列へマージ(連結)する。新しく作成した配列全体をソートする。C++では、STL(標準テンプ
-
C++の配列パズル:減算演算子を使わずに「自分以外の要素の合計」を求める方法
今回は、配列に関する興味深い問題を紹介します。n個の要素を持つ配列が与えられ、それをもとに同じくn個の要素を持つ別の配列を作成します。ただし、新しい配列のi番目には、元の配列のi番目の要素を除いたすべての要素の合計を格納します。さらに重要な制約として、減算演算子(-)を使用してはいけないという条件が課されています。 問題のポイント もし減算が使えるのであれば、話は簡単です。まず全要素の合計を求めておき、そこからi番目の要素を引いた値を新しい配列のi番目に格納すればよいだけです。しかし、この問題では減算が禁止されているため、別のアプローチが必要になります。 そこで、各位置i(0〜n-1)について