首页 >后端开发 >C++ >如何有效地将整数中的数字提取到数组中?

如何有效地将整数中的数字提取到数组中?

Patricia Arquette
Patricia Arquette原创
2025-01-12 16:22:43872浏览

How to Efficiently Extract Digits from an Integer into an Array?

将整数的数字高效提取到数组中:简明指南

问题:

给定一个整数 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn