C# での効率的な整数から数値配列へのメソッド
プログラミングでは、整数から個々の数値を抽出することが必要になることがよくあります。これを行うには、数値を文字列に変換し、それを 1 文字ずつ解析して整数にするよりも簡単で効率的な方法があります。
たとえば、値が 987654321 の整変数 i
があるとします。タスクは、数値の各桁を表す整数の配列 is
を作成することで、結果は [9, 8, 7, 6, 5, 4, 3, 2, 1] になります。
スタックベースの再帰的ソリューション:
<code class="language-csharp">public Stack<int> NumbersIn(int value) { if (value == 0) return new Stack<int>(); var numbers = NumbersIn(value / 10); numbers.Push(value % 10); return numbers; }</code>
このソリューションは再帰を使用して数値を個々の桁に分割します。数値を 10 で除算し、その余り (最後の桁) をスタックにプッシュし続けます。数値が 0 に達すると再帰は停止し、元の数値を含むスタックが残ります。
スタックを使用した非再帰ソリューション:
<code class="language-csharp">public int[] NumbersIn(int value) { var numbers = new Stack<int>(); for (; value > 0; value /= 10) numbers.Push(value % 10); return numbers.ToArray(); }</code>
このアプローチは再帰を回避し、同じ目的でスタックを使用します。数値を 10 で除算し、数値が 0 になるまで剰余をスタックにプッシュします。最後に、スタックの内容が整数の配列に変換されます。
配列ベースの非再帰ソリューション:
<code class="language-csharp">private static int[] NumbersIn(int value) { // 0 的对数无法计算,所以直接返回。 if (value == 0) return new int[] { 0 }; value = Math.Abs(value); var digits = 1 + (int)Math.Log10(value); var buffer = new int[digits]; for (var counter = digits - 1; counter >= 0; counter--) { buffer[counter] = value % 10; value /= 10; } return buffer; }</code>
このソリューションは、配列を直接操作して数値の桁を保存します。数値を繰り返しカウントし、配列を割り当て、各数値を正しい場所に保存します。この方法は、整数から個々の数値を抽出する直接的かつ効率的な方法を提供します。
以上がC# で整数をその数字の配列に効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。