0

我已经在 J​​ava 中解决了这个问题并使用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在那里?

因为当它最初被调用时,它使用数字,并检查它是否 <=1 在这种情况下它只输出数字(0/1)并结束函数,否则它获取数字并从除以 2 中得到余数( 1/0) 然后再次调用该函数number >> 1

是否number >> 1意味着它从整数 ex 1234 中删除结束号在递归调用中将是 123?

4

2 回答 2

1

>>与除以 2 的效果相同。

该数字以二进制形式存储,因此将其向右移动一位会将该位推出,这具有将数字除以 2 的效果,就像您将十进制数向右移动一位一样它除以 10。

您可以使用具有相同效果的除法。

于 2013-03-07T14:45:53.730 回答
0

>> 运算符基本上将位向右移动作为参数给出的次数,它基本上等于将数字除以该参数的 2 次幂 (x/2^n)。要将十进制数转换为二进制数,您需要将数字递归地除以 2,直到无法再除以 - 在这种情况下,当它小于 1 时。并且在途中您必须收集每个此类除法中的提醒,即有效地是您想要获得的二进制数。

于 2013-03-07T14:50:38.817 回答