9

2 つの整数を 2 つの数字の配列に変換する必要があるため、たとえば 544 はarr[0] = 5, arr[1] = 4, arr[2] = 4.

これを行ういくつかのアルゴリズムを見つけましたが、それらは新しい配列を作成し、これを返します。このメモリを 2 つの配列に割り当てる必要があるため、参照によって 2 つの整数を渡し、それらに対して直接これを行います。

これらの整数は実際にはテンプレート型であるため、変更可能である必要があるため、これを行うことができると思います。そのため、ここに C++ タグを追加しました。

4

4 に答える 4

9

次のようなものを使用するだけです:

int n = 544; // your number (this value will Change so you might want a copy)
int i = 0; // the array index
char a[256]; // the array

while (n) { // loop till there's nothing left
    a[i++] = n % 10; // assign the last digit
    n /= 10; // "right shift" the number
}

これにより、数値が逆順で返されることに注意してください。iこれは、値の長さを決定する方法に基づいて、初期値と増分/減分を変更することで簡単に変更できます。


(Brett Hale) 投稿者が気にしないことを願っていますが、変換前に 10 進数の桁数を正しく判断するのは簡単ではないため、この場合に使用するコード スニペットを追加すると思いました。

{
    char *df = a, *dr = a + i - 1;
    int j = i >> 1;

    while (j--)
    {
        char di = *df, dj = *dr;
        *df++ = dj, *dr-- = di; /* (exchange) */
    }
}
于 2013-04-13T12:19:10.557 に答える
9

簡単な解決策は次のとおりです。

int i = 12312278;

std::vector<int> digits;

while (i)
{
    digits.push_back(i % 10);

    i /= 10;
}

std::reverse(digits.begin(), digits.end());

または、文字列ベース ( i >= 0 )

for (auto x : to_string(i))
    digits.push_back(x-'0');
于 2013-04-13T12:20:29.730 に答える
1

整数を呼び出しaます。

の単位桁を取得するにはaa % 10

a10 が単位桁になるように下にシフトするには、a / 10

いつ完了したかを知るには、a == 0

そもそも配列がどのくらいの大きさである必要があるかを知るには、min(ceil(log(a+1, 10)), 1)(これが機能することを確信するために、計算機で対数部分を試してください。複数の引数 log がない場合は、identity を使用してくださいlog(x,y) == log(x)/log(y)) 。

于 2013-04-13T12:19:01.500 に答える