0

所以,我必须制作一个程序,将十进制数转换为二进制并打印出来,但不使用 Convert。我到了可以打印出数字的地步,但它是相反的(例如:12 出现为 0011 而不是 1100),有人知道如何解决这个问题吗?这是我的代码:

        Console.Write("Number = ");
        int n = int.Parse(Console.ReadLine());
        string counter = " ";


        do
        {

            if (n % 2 == 0)
            {                  
                counter = "0";
            }

            else if (n % 2 != 0)
            {
                 counter = "1";
            }

            Console.Write(counter);

            n = n / 2;
        }
        while (n >= 1);
4

5 回答 5

1

简单的解决方案是在开头添加它们:

Console.Write("Number = ");
int n = int.Parse(Console.ReadLine());
string counter = "";

while (n >= 1)
{
   counter = (n % 2) + counter;
   n = n / 2;
}
Console.Write(counter);

你实际上甚至不需要 if 语句

于 2013-08-22T21:00:19.453 回答
0

您以相反的顺序生成数字,因为当您使用 % 2 来确定位值时,您从最低有效数字开始。不过,您正在做的事情还不错,因为它是确定位的便捷方法。您所要做的就是通过收集它来反转输出,直到您生成所有位,然后以相反的顺序输出所有内容。(我没有尝试编译和运行,可能有错字)

一个简单的解决方案是

System.Text.StringBuilder reversi = new System.Text.StringBuilder();

然后在你的代码中替换

Console.Write(counter);

reversi.Append(counter);

最后添加循环的结尾,添加这样的代码

string s = reversi.ToString();
for (int ii = s.Length-1; ii >= 0; --ii)
{
  Console.Write(s[ii]);
}

有更好的方法可以做到这一点,但这很容易理解为什么它会修复你的代码——看起来你正在尝试学习 C#。

于 2013-08-22T21:14:36.337 回答
0

您可以将它们插入到 StringBuidler 中,而不是立即编写它们

var sb = new StringBuilder();
....
sb.Insert(0, counter);

然后使用那个 StringBuilder

var result = sb.ToString();
于 2013-08-22T21:01:51.707 回答
0

完成计算后,您可以反转字符串

于 2013-08-22T21:01:56.047 回答
0

如果我没错的话

int value = 8;
string binary = Convert.ToString(value, 2);
于 2016-03-18T07:25:09.383 回答