-1

我想将二进制计数转换为十进制。我的代码片段:

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(十进制 8)输出:1

输入 1000(十进制 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 索引开始的字符串中读取字符时,您将提取出显着性降低的二进制数字。这意味着您的指数应该减少,而不是增加。

编辑:我还在你的问题中注意到你正在错误地阅读二进制文件:

输入:100(十进制 8)输出:1
输入 1000(十进制 16)输出:1

100 是 4,而不是 8。同样,1000 是 8,而不是 16。也许你忘记2^0了 ,或者 1 的数字?

于 2013-05-01T17:48:28.130 回答
1

另一种方法是摆脱涉及投到 from double 的 pow。

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 *= 2;   // shift existing total up a power of 2 (could use << 1) 
        wynik += aaa; // Add the next digit
    }
    cout << wynik;
    return 0;
}
于 2013-05-02T06:48:50.140 回答