C 如何将十进制数转换为二进制?

新手上路,请多包涵

我的任务是编写一些代码,这些代码将接受用户输入并将数字转换为二进制数。到目前为止,我已经编写了一些代码,但是遇到了一个问题。我必须使用 for 循环和商余数方法。当我输出余数(二进制)时,它没有打印最后一个数字。

我要问的问题是:我必须在 for 循环中进行哪些更改才能打印出二进制数的最后一位?

 int main()
{
    int num;
    int rem;

    cout << "Please enter a number: ";
    cin >> num;

    for (int i = 0; i <= (num + 1); i++)
    {
        num /= 2;
        rem = num % 2;
        cout << rem;
    }

    _getch();
    return 0;
}

任何帮助表示赞赏,谢谢!

原文由 Justin Farr 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 351
1 个回答

通过将 num 除以 2 开始算法时,您会丢失最后一个二进制数。为避免此问题,您应该交换指令 num /= 2;rem = num % 2;

您的循环也迭代了太多次:实际上您可以在 num == 0 时停止。以下代码对于 <= 0 的输入无效。

 int main()
{
    int num;
    int rem;

    cout << "Please enter a number: ";
    cin >> num;

    while (num != 0)
    {
        rem = num % 2;
        num /= 2;
        cout << rem;
    }
    cout << std::endl;

    return 0;
}

如果您想以正确的顺序编写它,您应该首先以 2 为基数计算您的数字的日志。以下解决方案使用一个数字 index 以“1”开头,后面有“0” :

 int main()
{
    int num;
    int rem;

    cout << "Please enter a number: ";
    cin >> num;

    if (num > 0) {
      int index = 1;
      while (index <= num)
         index *= 2;
      index /= 2;

      do {
        if (num >= index) {
           cout << '1';
           num -= index;
        }
        else
           cout << '0';
        index /= 2;
      } while (index > 0);
      cout << std::endl;
    }
    else
      cout << '0';

    cout << endl;
    return 0;
}

原文由 Franck 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题