C#中高效的整数转数字数组方法
在编程中,经常需要从整数中提取单个数字。与将数字转换为字符串再逐个字符解析为整数相比,有更简洁高效的方法实现此转换。
例如,假设有一个整数变量 i
,其值为 987654321。任务是创建一个整数数组 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中文网其他相关文章!