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

Jus*_*arr 1 c++ binary loops for-loop decimal

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

任何帮助表示感谢,谢谢!

Fra*_*nck 5

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;
} 
Run Code Online (Sandbox Code Playgroud)

如果你想以正确的顺序写入它,你应该首先计算以 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;
} 
Run Code Online (Sandbox Code Playgroud)