第一次尝试-在 C# 中使用循环和列表 <> 将十进制转换为二进制的代码

First try - code for Decimal to Binary in C# with loop and list<>

我是 C# 的新手,但是我已经尝试编写将十进制转换为二进制的代码,我知道还有很多其他方法,可能还有很多更简单的方法,但我只是想尝试这种方式 - 使用列表。有人可以告诉我我做错了什么吗? 谢谢!

static void Main(string[] args)
{
    long decimalNum = long.Parse(Console.ReadLine());
    long divideNumber = decimalNum;
    List<string> BinaryResult = new List<string>();

    for (int i = 0; divideNumber == 0; i++)
    {
        long divideBytwo = divideNumber % 2;

        if (divideBytwo == 1)
        {
            BinaryResult.Add("1");
        }

        if (divideBytwo == 0)
        {
            BinaryResult.Add("0");
        }


        divideNumber /= 2;
    }

    for (int i = 0; i < BinaryResult.Count; i++)
    {
        Console.Write(BinaryResult[BinaryResult.Count - i]);
    }
}

有没有整数列表的方法或者..我完全错了吗?

几件事:

  1. 在您的第一个 for 循环中,divideNumber == 0 与您想要的相反:它表示您希望循环到 运行 只要 divideNumber 为零,而您真正想要的是 运行 until divideNumber 的循环为零.请尝试 divideNumber != 0

  2. 在你的第二个 for 循环中,如果 BinaryResult 包含任何数据,你将得到一个越界异常。您正在尝试读取索引 1 到 x(其中 x 是列表中的项目数),而有效索引是 0 到 x - 1。您可以修复索引,或者因为您正在以与创建它们相反的顺序访问元素,您可能会发现使用 Stack<T> 而不是 List<T> 更直观。

如果您只需要将数字转换为二进制,就使用它:

int value = 8;
string binary = Convert.ToString(value, 2);

一种可能的解决方案是按照@Joe 的建议使用 Stack。我还使用了字符串生成器而不是使用字符串列表。请记住,我也在学习 C#,所以我的答案可能不是最好的。

static void Main(string[] args)
{   
    long decimalNum = long.Parse(Console.ReadLine());
    StringBuilder sb = new StringBuilder();

    Stack<String> BinaryResult = new Stack<string>();

    while (decimalNum > 0)
    {
        var rem = decimalNum%2;
        BinaryResult.Push(rem.ToString());
        decimalNum = decimalNum/2;
    }

    while (BinaryResult.Count > 0)
    {
        sb.Append(BinaryResult.Pop().ToString());
    }

    Console.WriteLine(sb.ToString());
    Console.ReadLine();
}