0

そのため、10 進数を 2 進数に変換して出力するプログラムを作成する必要がありますが、Convert は使用しません。数字を印刷できるところまで来ましたが、逆になっています (たとえば、12 は 1100 ではなく 0011 として出力されます)。これが私のコードです:

        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 を使用してビット値を決定する場合、最下位桁から開始するため、数字は逆の順序で生成されます。ただし、ビットを決定する便利な方法であるため、あなたがしていることは悪くありません。すべてのビットを生成し、すべてを逆の順序で出力するまで収集して、出力を逆にするだけです。(私はコンパイルして実行しようとしませんでした。タイプミスがあるかもしれません)

1つの簡単な解決策は

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

私が間違っていなければ

int value = 8;
string binary = Convert.ToString(value, 2);
于 2016-03-18T07:25:09.383 に答える
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 に答える