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中文網其他相關文章!