创建二进制到十进制转换器;有大部分裸骨下来,但我有一个问题 - 程序从左到右而不是从右到左读取二进制数(正如通常通过手写计算它)。因此,诸如' 1111',' 10001'和10101'等输入作为正确的小数答案出现,但有些输入如' 10011&# 39;显然会出错。
TL; DR哪种方式最适合翻转循环如何通过char数组?
示例代码:
for (i = 0; i < 33 && binary[i] != '\0'; i++, power++)
{
if (binary[i] == '0')
continue;
else if (binary[i] == '1')
decimal = pow (2,power) + decimal;
else
{
cout << "Invalid input." << endl;
return 0;
}
}
答案 0 :(得分:0)
您可以使用以下内容从头到尾读取数组,
int pos_of_zero = strlen(binary);
for(int i = pos_of_zero - 1; i > -1; --i, power++)
{
// ....
答案 1 :(得分:0)
从您上面编写的代码中可以看出,您的字符串将正好是33位,或者如果它更短,它将被终止。我只是问,因为这有点奇怪,如果(例如)你可以使它总是空终止会更好。这样可以简化代码。
但如果是这样,那么以下代码应该可以工作
// find the number of digits
int num_digits = 0;
while (num_digits < 33 && binary[num_digits] != '\0')
++num_digits;
// now we have the number of digits we can ...
// ... loop backwards through the string
for (int i = num_digits; i > 0; )
{
--i;
if (binary[i] == '0')
continue;
else if (binary[i] == '1')
decimal = pow (2,power) + decimal;
else
{
cout << "Invalid input." << endl;
return 0;
}
}
我看到你收到的其他答案都假设你的字符串总是以空值终止。如果那是真的那么你应该选择其中一个答案。
答案 2 :(得分:0)
您可以执行以下操作
for (i = strlen(binary) - 1; i >= 0; --i) {
}
以这种方式,如果您有二进制数“10011”,for循环将按此顺序遍历位:1 - &gt; 1 - &gt; 0 - &gt; 0 - &gt; 1。
您可以通过避免调用pow函数,以更有效的方式计算二进制数的十进制值。
for (int i = 0, decimal = 0; i < strlen(binary); ++i)
decimal = decimal*2 + (binary[i] - '0');