2016-03-19 21 views
-3

int配列からintを連結し、それらをintに等しくしたいとします。intの連結

例えば

int arr[]={1,2,4,0}; 
int arr2[]= {1,0,2,3}; 

は私

int num = 1240; 
int num2 = 1023; 

の出力を与え、私が試した方法は、特定の電源10と各指標を乗算し、それらを添加しました。 (10進法への変換)。ただし、配列に '0'は表示されません。親切に助けてください。あなたは10で結果をmultiplicate、インデックスを追加する必要が

+3

コードを表示.. –

答えて

-2

#include <iostream> 

int main(void) { 
    int arr[4]; 

    arr[0] = 1; 
    arr[1] = 0; 
    arr[2] = 2; 
    arr[3] = 3; 

    int i = 0; 
    int res = 0; 

    while (i < 4) { 
     res = res * 10 + arr[i]; 
     ++i; 
    } 
    std::cout << res << std::endl; // print 1023 
} 
+1

明示的なサイズが必要な配列の初期化を取り除くのはなぜですか?なぜ関数スコープ変数 'i'を作成するのですか?なぜwhileループですか?なぜ2つの場所で配列サイズをハードコードするのですか? –

+0

彼は明らかに開発者になっているので、私は彼が理解するためにできるだけ明確にしたいと思った – Spouark

+0

OPは問題のアレイの初期化を持っています、なぜそれを悪化させるために変更するのですか? –

4

これはシーケンスをオーバー倍左できるハンディダンディstd::accumulateのための時間のように思えます。あなたが提供する必要があるのはイテレータ、あなたの初期値(ゼロ)、そしてあなたの数学を行うにはBinaryFunctionです:

int arr[] = {1, 2, 4, 0}; 
int res = std::accumulate(std::begin(arr), std::end(arr), 0, 
    [](int lhs, int rhs) { return lhs * 10 + rhs; }); 

あなたはループを使用する場合は、最も簡単な方法は、次のようになります。

int res{}; 
for (auto i : arr) { 
    res = res * 10 + i; 
} 

または使用できない場合はC++ 11あなたは、インデックス

int res = 0; 
for (int i = 0; i < (sizeof arr/sizeof arr[0]); ++i) { 
    res = res * 10 + arr[i]; 
} 

またはポインタ直接

int res = 0; 
for (int* p = arr; p != arr + (sizeof arr/sizeof arr[0]); ++p) { 
    res = res * 10 + *p; 
} 
0123を使用することができます