我想将二进制计数转换为十进制。我的代码片段:
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的问题?我是真的吗?
谢谢,
对不起我的Englosh
答案 0 :(得分: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
。
有关字符转换的更多信息,请参阅this question。
另外,正如其他人所指出的那样,当从0索引开始读取字符串中的字符时,您将拉出降低显着性的二进制数字。这意味着你的指数应该减少而不是增加。
编辑:我在你的问题中也注意到你正在读二进制错误:
输入:100(十进制8)输出:1
输入1000(十进制16)输出:1
100是4,而不是8.同样,1000是8,而不是16.也许你忘了2^0
或1位?
答案 1 :(得分: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 *= 2; // shift existing total up a power of 2 (could use << 1)
wynik += aaa; // Add the next digit
}
cout << wynik;
return 0;
}