1
int inputNumber=0;
int divisionStore=0,modStore=0;
vector<int> mainVector;

cout << "\nEnter a Number to Convert to Binary.\n" << endl;

cin >> inputNumber;

do
{
    modStore=inputNumber%2;
    inputNumber=inputNumber/2;
    mainVector.push_back(modStore);

}while(inputNumber!=1);

for (int i=0;i<mainVector.size();i++)
{
    cout<<endl<<mainVector[i]<<endl;
}

似乎有一个逻辑错误,但我找不到它有什么问题?该程序没有打印正确的转换,因为循环似乎在它可以推送最后一个数字之前结束。

4

6 回答 6

4

我认为你需要改变:

}while(inputNumber!=1)

至:

}while(inputNumber!=0)
于 2013-05-19T08:01:53.800 回答
2

为什么不使用 STL - 即 bitset

http://www.cplusplus.com/reference/bitset/bitset/to_string/

可能在几行代码中完成!

于 2013-05-19T08:01:54.093 回答
0

inputNumber%2是最低有效位,因此您的向量将包含相反顺序的位。只需以相反的顺序循环向量。

while(inputNumber!=1)- 您必须循环 while inputNumber!=0,否则您将不会处理最后一位。

于 2013-05-19T08:27:55.077 回答
0

接缝是一种非常复杂且效率低下的方式(如果我没有误解你的话)。您可能正在寻找位操作运算符,而不是 /、% 等。如果您真的想将它粘贴在向量中,应该这样做:

while (inputNumber) {
  mainVector.push_back(inputNumber & 1);
  inputNumber >>= 1;
}

但是请注意,这会将最低有效位放在向量的开头,可能不是您想要的,但看起来这也是您的代码试图做的。

于 2013-05-19T08:08:32.257 回答
0

我回答了类似的问题在这里,我使用了递归函数

void decimal_to_binary(int decimal)
{
    int remainder = decimal % 2;
    if (decimal < 1)
        return;
    decimal_to_binary(decimal / 2);
    cout << remainder;
}
于 2013-05-19T08:14:23.083 回答
0
  #include<iostream>
    using namespace std;
    int main(){
    int x,bin;
    x=0 ,bin=0;
           int ar[10000];
           cout<<"Enter Decimal Number "<<endl;
            cin>>x;
        int n=0;
            while(x>0){
                bin=x%2;
                x=x/2;
                ar[n]=bin;
                n++;
                }

cout<<endl;
n=n-1;

    for(n;n>=0;n--){
cout<<ar[n]; }
cout<<endl;

return 0;
}
/* Try this */
于 2013-11-11T17:58:26.370 回答