递归地将十进制数转换为二进制数

时间:2014-06-25 02:59:08

标签: c recursion

对于家庭作业,我被要求创建一个递归函数,该函数接受一个int和一个int指针,并打印第一个int的二进制表示,并将指针的目标与二进制中的一个数目一起留下。 / p>

它适用于某些值 - 65和99可以工作 - 但不适用于大多数其他值(负面不在问题域中)。我不知道为什么。

void binaryPrinter(int value, int *numberOfOnes)
{
    int thisbit;

    //printf("Value is %i",value);

    if (value <= 0) { 
        printf("%i",value);
        return;
    } else if (value == 1){
        printf("1");
        *numberOfOnes = *numberOfOnes + 1;
        return;
    }


    thisbit = value % 2;
    if (thisbit) { *numberOfOnes = *numberOfOnes + 1; }
    printf("%i",thisbit);
    binaryPrinter(value / 2, numberOfOnes);
}

为什么?

1 个答案:

答案 0 :(得分:7)

因为您首先打印最不重要的位,即您正在反向打印数字。

65和99是二元回文,结果很好。

在调用(和打印)高阶位后打印当前位的结果

// rest of the function as before, but at the very end...

binaryPrinter(value / 2, numberOfOnes);
printf("%i",thisbit);