-1

2 進数を 10 進数に変換したい。私のコードスニペット:

int main(){
    string count;
    char number;
    int counter;
    int score = 0;

    cout << "Wpisz liczbę w systemie binarnym" << endl;
    cin >> count;
    count << endl;

    counter = count.length();

    for (int i = 0; i < counter; i++)
    {
        number = count[i];
        int aaa = (int) number - '0' // is that correct ? I think not.
        score = aaa * pow(2,i) + score;
    }

    count <<wynik;
    return 0;
}

しかし、私のプログラムは非常に奇妙なスコアを出します。例えば:

入力 : 100 (10 進数 8) 出力 : 1

入力 1000 (10 進数 16) 出力 : 1

どうしてか分かりません。手伝って頂けますか ?それが char の問題だと思いますか?私は本当ですか?

ありがとう、

私の英語でごめんなさい

4

2 に答える 2

1

これを試してください:

int main(){
    string liczba;
    int licznik;
    int wynik = 0;

    cout << "Wpisz liczb w systemie binarnym" << endl;
    cin >> liczba;

    licznik = liczba.length();

    for (int i = 0; i < licznik; i++)
    {
        int aaa = liczba[i] -'0'; // A bit hacky way to convert char to int
        wynik += aaa * pow(2.0,licznik - i - 1); // Minus 1 to get the correct power
    }
    cout << wynik;
    return 0;
}

コードのどこから取得したかはわかりませんがcount、実際にはcout. 文字変換の詳細については、この質問
を 参照してください。

また、他の人が指摘しているように、インデックス 0 で始まる文字列から文字を読み取ると、有意性の低い2 進数が引き出されます。つまり、指数は増加するのではなく、減少する必要があります。

編集:あなたの質問で、バイナリを間違って読んでいることにも気付きました:

入力 : 100 (10 進数 8) 出力 : 1
入力 1000 (10 進数 16) 出力 : 1

100 は 8 ではなく 4 です。同様に、1000 は 16 ではなく 82^0です。

于 2013-05-01T17:48:28.130 に答える