2013-08-22 55 views
0

因此,我必须制作一个程序,将十进制数转换为二进制并打印出来,但不使用转换。我已经达到了可以打印出数字的地步,但它却是相反的(例如:12出现在0011而不是1100),任何人都有一个想法如何解决这个问题?这里是我的代码:C#将十进制数转换为二进制的程序

 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

你可以[字符串逆向(http://stackoverflow.com/questions/228038/best-way-to-reverse-a-string) – tnw

回答

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语句

0

而不是他们inmediately写你可能将它们插入一个StringBuidler中

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

然后用那个StringBuilder

var result = sb.ToString(); 
0

当你完成计算它

+0

串柜台//你的号码 char [] inputarray = input.ToCharArray(); Array.Reverse(inputarray); counter = new string(inputarray); – ranifisch

0

由于你已经开始用最少的significiant位数当您使用%2来确定的位值产生的数字以相反的顺序可以颠倒字符串。你在做什么并不差,因为它是确定位的方便途径。你所要做的就是通过收集输出来反转输出,直到你产生了所有的位,然后以相反的顺序输出所有的东西。 (我没有尝试编译并运行,可能有一个错字)

一个简单的解决方案是

System.Text.StringBuilder黑白棋=新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#。

0

如果我没有记错

int value = 8; 
string binary = Convert.ToString(value, 2); 
相关问题