C++ 具有字符数组的二进制到十进制转换器
创建二进制到十进制的转换器;把大部分的裸骨头放下来,但我有一个问题——程序从左到右读取二进制数,而不是从右到左读取二进制数(通常通过手写来计算二进制数)。因此,诸如“1111”、“10001”和“10101”之类的输入显示为其正确的十进制答案,但诸如“10011”之类的某些输入显然是不正确的 TL;DR哪种方式最适合翻转循环通过字符数组的方式 示例代码:C++ 具有字符数组的二进制到十进制转换器,c++,gcc,C++,Gcc,创建二进制到十进制的转换器;把大部分的裸骨头放下来,但我有一个问题——程序从左到右读取二进制数,而不是从右到左读取二进制数(通常通过手写来计算二进制数)。因此,诸如“1111”、“10001”和“10101”之类的输入显示为其正确的十进制答案,但诸如“10011”之类的某些输入显然是不正确的 TL;DR哪种方式最适合翻转循环通过字符数组的方式 示例代码: for (i = 0; i < 33 && binary[i] != '\0'; i++, power++) { i
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;
}
}
for(i=0;i<33&&binary[i]!='\0';i++,power++)
{
if(二进制[i]=“0”)
继续;
else if(二进制[i]=“1”)
十进制=功率(2,功率)+十进制;
其他的
{
cout您可以使用以下命令从头到尾读取数组
int pos_of_zero = strlen(binary);
for(int i = pos_of_zero - 1; i > -1; --i, power++)
{
// ....
从您上面编写的代码中可以看出,您的字符串可能正好是33位数字,或者如果它较短,则将以null结尾。我之所以这样问是因为这有点奇怪,如果(例如)您可以使其始终以null结尾,则会更好。这将简化代码
但是如果是这样的话,那么下面的代码应该可以工作
// 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;
}
}
//查找位数
int num_位=0;
while(num_digits<33&&binary[num_digits]!='\0')
++数字;
//现在我们有了数字,我们可以。。。
//…在字符串中向后循环
对于(int i=num_位;i>0;)
{
--一,;
if(二进制[i]=“0”)
继续;
else if(二进制[i]=“1”)
十进制=功率(2,功率)+十进制;
其他的
{
cout您可以执行以下操作
for (i = strlen(binary) - 1; i >= 0; --i) {
}
以这种方式,如果您有一个二进制数“10011”,for循环将按如下顺序遍历位:1->1->0->0->1
通过避免调用pow函数,可以更有效地计算二进制数的十进制值
for (int i = 0, decimal = 0; i < strlen(binary); ++i)
decimal = decimal*2 + (binary[i] - '0');
for(int i=0,decimal=0;i
这会取代我的另一个for循环吗?因为当我尝试这样做时,会得到“无效输入”每次。和另一个答案一样,我每次都会得到“无效输入”。您需要调整我给出的代码部分以适合您的实现。您可能正在访问二进制数组的位置I,该位置I不是二进制数的一部分。我试图说的是,for循环可以从0到(大小\二进制-1)或从(size_of_binary-1)到0。或者您仍然可以从0到(size_of_binary-1)并使用公式decimal=decimal*2+(binary[i]-“0”)计算十进制值,这避免了多次调用pow()。