Efficient integer to numeric array method in C#
In programming, it is often necessary to extract individual numbers from integers. There are simpler and more efficient ways to do this than converting a number to a string and then parsing it character by character into an integer.
For example, suppose there is an integer variable i
with a value of 987654321. The task is to create an array of integers is
representing each digit of the number, resulting in [9, 8, 7, 6, 5, 4, 3, 2, 1].
Stack-based recursive solution:
<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>
This solution uses recursion to break the number into individual digits. It keeps dividing the number by 10 and pushing the remainder (the last digit) onto the stack. Once the number reaches 0, the recursion stops, leaving a stack containing the original number.
Non-recursive solution using stack:
<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>
This approach avoids recursion and uses a stack for the same purpose. It iteratively divides the number by 10 and pushes the remainder onto the stack until the number reaches 0. Finally, the contents of the stack are converted into an array of integers.
Array-based non-recursive solution:
<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>
This solution directly operates on the array to store the digits of the numbers. It iteratively counts the numbers, allocates the array, and stores each number in the correct location. This method provides a direct and efficient way to extract individual numbers from integers.
The above is the detailed content of How to Efficiently Convert an Integer to an Array of its Digits in C#?. For more information, please follow other related articles on the PHP Chinese website!