【问题标题】:decimal to binary converter c++?十进制到二进制转换器c ++?
【发布时间】:2013-05-14 00:11:15
【问题描述】:
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;
}

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

【问题讨论】:

  • 你期待什么结果,你得到了什么结果?
  • 那么,您是否尝试过使用一些“跟踪” - 打印正在划分的数字... [我可以确切地看到问题所在,但您可以从实际工作中了解更多信息比我告诉你]
  • @CaptainObvlious 我希望在输入为 5 时得到 101,但似乎走错了路,只显示了 10
  • @MatsPetersson 我试图用钢笔和铅笔检查输入,但找不到任何东西。但我猜有人刚刚回答了问题所在。
  • 使用笔和纸是一个好方法,但您当然必须考虑到您可能不会做与计算机完全相同的事情。 Paul R 有正确的答案 - 当 inputNumber 为 0 时您需要停止。

标签: c++ binary decimal


【解决方案1】:

我认为你需要改变:

}while(inputNumber!=1)

到:

}while(inputNumber!=0)

【讨论】:

    【解决方案2】:

    为什么不使用 STL - 即 bitset

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

    几行代码就可以搞定!

    【讨论】:

    • 它是一个类项目,不幸的是必须使用 STL。
    • @user2086751 - 也许您需要重新表述该评论(并学习撇号的使用)
    • 不太可能,正好是两行:bitset&lt;some_size&gt; mySet(myInt); string v = mySet.to_string();
    • @Jean-MichaëlCelerier - 一对是两个。你会因为正确而获得 +1
    • 哈哈抱歉,我不是母语人士,在我看来,当人们说“一对”时,我总是认为它是“一些”
    【解决方案3】:

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

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

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

    【讨论】:

    • 您发布的代码将在任何体面的编译器上生成相同编译的代码。 &gt;&gt;= 1/= 2 复杂一点。
    • 我同意,编译器应该能够优化代码。有趣的是,如果我将 >>= 1 更改为 /= 2,gcc 版本 4.6.1 似乎会添加一些指令,如果我将 & 1 更改为 % 2,则会添加一些指令。至少在 -O2 优化级别上。
    【解决方案4】:

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

    void decimal_to_binary(int decimal)
    {
        int remainder = decimal % 2;
        if (decimal < 1)
            return;
        decimal_to_binary(decimal / 2);
        cout << remainder;
    }
    

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

      • 是的,我在打印之前确实将其反转。倒车不是我主要关心的,所以没有在这里发布.reverse()
      【解决方案6】:
        #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 */
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-26
        • 1970-01-01
        • 2017-01-18
        • 2020-06-27
        • 2020-06-25
        • 2012-05-28
        • 1970-01-01
        相关资源
        最近更新 更多