将整数的数字高效提取到数组中:简明指南
问题:
给定一个整数 i,是否存在一种高效的方法将其转换为包含其各个数字的数组?例如,将 i = 987654321 转换为 [9, 8, 7, 6, 5, 4, 3, 2, 1],无需使用 ToString() 和字符迭代等中间操作?
解答:
使用堆栈的递归解法:
<code class="language-c#">public Stack<int> NumbersIn(int value) { if (value == 0) return new Stack<int>(); var numbers = NumbersIn(value / 10); numbers.Push(value % 10); return numbers; } var numbers = NumbersIn(987654321).ToArray();</code>
使用 for 循环的另一种解法:
<code class="language-c#">public int[] NumbersIn(int value) { var numbers = new Stack<int>(); for(; value > 0; value /= 10) numbers.Push(value % 10); return numbers.ToArray(); }</code>
直接基于数组的方法:
<code class="language-c#">private static int[] NumbersIn(int value) { // 处理 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 = 0; counter < digits; counter++) { buffer[digits - 1 - counter] = value % 10; value /= 10; } return buffer; }</code>
这些方案提供了高效简洁的方法来提取整数中的数字,从而能够无缝地转换为各个数字的数组。
以上是如何有效地将整数中的数字提取到数组中?的详细内容。更多信息请关注PHP中文网其他相关文章!