问题:编写一个程序,将一个整数转换为二进制形式。
分析:一般来讲,对于数值n,其二进制数的最后一位是n % 2,因此计算出的第一个数字恰好是需要输出的最后一位数字。我们使用一个递归函数实现,在函数中,首先在递归调 用之前计算n % 2的数值,然后在递归调用语句之后进行输出。这样,计算出的第一个数值反而在最后一位输出。为了得出下一个数字,需要把原数值除以2(相当于在十进 制下把小数点左移一位)。如果此时得出的数值是偶数,则下一个二进制位的数值是0;若得出的是奇数,则下一个二进制位的数值就是1。例如:5是奇数,因此最低位一定 是1,5/2的数值是2(整数除法),所以下一位值是0。这时已经得到了数值01。重复上述计算,即使用2除以2得出1,而1 % 2的数值是1,因此下一位值是1。这时得到的数 值是101。当被2除的结果小于2时,说明已计算至最后一位二进制位,因此此时停止计算。
程序:#include <stdio.h> void to_binary(unsigned long); int main(void) { unsigned long number; printf("Enter an integer (q to quit): \n"); while (scanf("%ul", &number) == 1) { printf("Binary equivalent: "); to_binary(number); putchar('\n'); printf("Enter an integer (q to quit): \n"); } printf("Done.\n"); return 0; } void to_binary(unsigned long n) { int r; r = n % 2; if (n >= 2) { to_binary(n / 2); } putchar('0' + r); return; }