【问题标题】:C++ How to convert decimal number to binary?C ++如何将十进制数转换为二进制?
【发布时间】:2017-02-18 05:28:04
【问题描述】:

我的任务是编写一些代码,这些代码将接受用户输入并将数字转换为二进制数。到目前为止,我已经编写了一些代码,但是遇到了一个问题。我必须使用 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;
} 

感谢您的帮助,谢谢!

【问题讨论】:

  • 只需交换指令num /= 2;rem = num % 2; 您首先将您的数字除以2,因此您丢失了最后一个二进制数。

标签: c++ loops for-loop binary decimal


【解决方案1】:

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

您的循环也重复了太多次:实际上您可以在num == 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 为基数计算您的数字的对数。以下解决方案使用以“1”开头且后面有“0”的数字 index

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;
} 

【讨论】:

  • 谢谢!另一个简单的问题:我应该将结果存储在一个数组中并向后打印数组以获得正确的二进制数吗?
  • 是的,它应该可以工作。另一种方法是计算以 2 为底的对数并执行条件减法直到 0。
  • @JustinFarr 我已经更新了答案,可以在没有任何数组的情况下以正确的顺序打印结果。
  • 非常感谢您的帮助,弗兰克!
【解决方案2】:

你需要从

改变你的台词
 num /= 2;
 rem = num % 2;

rem = num % 2;
 num /= 2;

这将以相反的顺序打印二进制数。我建议将 for 循环更改为 while(num>0) 并将每个数字添加到数组而不是 cout。稍后从左到右打印数组以获得正确的二进制顺序。

【讨论】:

    【解决方案3】:

    这个想法是使用数学。将基数为 10 的整数转换为基数 2。另一种方法可能是通过根据 2 的幂测试整数值到整数的最大位值来横向位。我还假设您不会使用浮点数。转换为浮点二进制值是一件令人头疼的事情。

    【讨论】:

    • "如何将十进制转换为二进制?" “将十进制转换为二进制。”大声笑
    猜你喜欢
    • 2014-04-21
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2012-06-26
    相关资源
    最近更新 更多