首页 > 后端开发 > C++ > 如何在 C# 中高效地将整数转换为其数字数组?

如何在 C# 中高效地将整数转换为其数字数组?

Patricia Arquette
发布: 2025-01-12 16:27:44
原创
705 人浏览过

How to Efficiently Convert an Integer to an Array of its Digits in C#?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板