Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;如何将十进制数转换成二进制数?_C++_Loops_For Loop_Binary_Decimal - Fatal编程技术网

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

C++ C++;如何将十进制数转换成二进制数?,c++,loops,for-loop,binary,decimal,C++,Loops,For Loop,Binary,Decimal,我的任务是编写一些代码,接受用户输入并将数字转换为二进制数。到目前为止,我已经写了一些代码,但有一个问题。我必须使用for循环和商余数方法。当我输出余数(二进制)时,它不会打印最后一个数字 我要问的问题是:为了让for循环打印出二进制数的最后一位数字,我需要对for循环进行哪些更改 int main() { int num; int rem; cout << "Please enter a number: "; cin >> num;

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

我要问的问题是:为了让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;
} 
intmain()
{
int-num;
内部rem;
cout>num;

对于(int i=0;i这个想法是使用数学。将以10为基数的整数转换为以2为基数的整数。另一种方法可能是通过测试整数的2次幂直至整数的最大位值来横向转换位。我还假设您不会使用浮点数。转换为浮点数二进制值是一件令人头痛的事。

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


循环也会重复太多次:事实上,当
num==0
时,可以停止循环。以下代码对于需要更改行的输入无效

 num /= 2;
 rem = num % 2;


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

可能重复两条指令
num/=2;
rem=num%2;
首先将数字除以2,这样就丢失了最后一个二进制数。“如何将十进制转换为二进制?”“将十进制转换为二进制。”。"谢谢!另一个简短的问题:我是否应该将结果存储在数组中并向后打印数组以获得正确的二进制数?是的,它应该可以工作。另一种方法是计算以2为基数的日志并执行条件减法,直到0。@JustinFarr我已更新了答案,以便在没有任何数组的情况下按正确顺序打印结果。@JustinFarry、 非常感谢你的帮助,弗兰克!
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;
} 
 num /= 2;
 rem = num % 2;
rem = num % 2;
 num /= 2;