所以,我必须创建一个程序,将十进制数转换为二进制并打印它,但不使用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);
答案 0 :(得分: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语句
答案 1 :(得分:0)
您可以将它们插入StringBuidler
,而不是立即编写它们var sb = new StringBuilder();
....
sb.Insert(0, counter);
然后使用StringBuilder
var result = sb.ToString();
答案 2 :(得分:0)
完成计算后可以反转字符串
答案 3 :(得分: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#。
答案 4 :(得分:0)
如果我没弄错的话
int value = 8;
string binary = Convert.ToString(value, 2);