我在Java中解决了这个问题并使用了Integer.toBinaryString()
但是这样的函数在c ++中是不可用的(据我所知)
我已经完成了这个功能并且它完全有效但是我很困惑为什么它有效,任何帮助将不胜感激
void decimalToBinary (int number)
{
int remainder;
if (number <= 1)
{
cout << number;
return;
}
remainder = number % 2;
decimalToBinary(number >> 1);
cout << remainder;
}
我理解的主要问题是递归调用,为什么它需要number >> 1
?
因为当它最初被调用时它使用数字,并检查它是否是&lt; = 1,在这种情况下它只输出数字(0/1)并结束函数,否则它取数字并得到余数来自除以2(1/0)然后再用number >> 1
number >> 1
是否意味着它从整数中删除了结束号
ex 1234在递归调用中会是123吗?
答案 0 :(得分:1)
>>
与除以2的效果相同。
数字存储为二进制,因此将其向右移一位会将该位移出,这就是将数字除以2的效果,就像将十进制数字向右移动一样将它除以10。
您可以使用具有相同效果的除法。
答案 1 :(得分:0)
&gt;&gt;运算符基本上将位向右移动了作为参数给出的次数,并且它基本上等于将该数除以该参数的两倍(x / 2 ^ n)。要将十进制数转换为二进制数,您需要递归地将数字除以2,直到不再可能进行除法 - 在这种情况下,当它小于1.并且在这种情况下,您必须在每个这样的除法中收集提醒,这是实际上是你想得到的二进制数。