我的代码有什么问题?

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
将来,请在此处而不是在某些外部链接中发布您的代码,该链接的寿命可能比此论坛的寿命短。

C#:
using System;

namespace binary
    /*
input
57
output
00111001


input
47
output
00101111
    */
{
    class DecimalToBinary
    {
        static void Main(string[] args)
        {
            Console.Write("Decimal: ");
        int  n, i;       
       int[] a = new int[10];     
       Console.Write("Enter the number to convert: ");   
       n= int.Parse(Console.ReadLine());     
       for(i=0; n>0; i++)     
        {     
         a[i]=n%2;     
         n= n/2;   
        }     
       Console.Write("Binary number= ");     
       for(i=i-1 ;i>=0 ;i--)     
       {     
        Console.Write(a[i]);     
       }         
        }
    }
}
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
你遇到了什么错误?如果没有错误,那么您将看到什么行为以及期望看到什么行为?
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,500
地点
弗吉尼亚州切萨皮克
编程经验
10+
从我所看到的,输出是正确的二进制值。

如果问题是您没有看到前导零,那是因为您的代码没有显示前导零。您的循环当前仅从找到的最高有效位开始,一直向下进行。如果要让前导零从位缓冲区的最高有效位开始,然后逐步下降。

或者更好的方法是,使用按位运算来检查哪些位处于打开状态,而不是进行重复除法。这样,您甚至不需要数组。

与您的问题有关的两件事:
  1. 在C#中
    C#:
    int
    是32位值。您似乎硬编码的东西只有10位。
  2. 在C#中 you could simply use Convert.ToString(n, 2).
 
最佳 底部