问题链接:HDU2051 Bitset。入门训练题,用C语言编写程序。
这个问题是将输入的整数转换为2进制数。
进制转换问题需要用模除,转换为2进制就模除2。然而,模除是从低位开始取出各个位的,最后的结果还需要逆转一下再输出。
用位运算代替2的模除是一个好主意,除以2也可以用右移1位运算来代替。
AC程序如下:
/* HDU2051 Bitset */
#include <stdio.h>
int main(void)
{
int n, count;
char bits[64]; // 64位就够了
while(scanf("%d", &n) != EOF) {
// 位数计数清零
count = 0;
// 进制转换:转为2进制,放在字符数组bits中,因为是从低位开始取出,所以是逆序
while(n) {
bits[count++] = (int)(n & 1) + '0'; // n % 2 + '0'
n >>= 1; // n = n / 2
}
if(count == 0) { // n=0时,需要特殊处理
bits[0] = '0';
count = 1;
}
// 输出:逆序输出,总共count位
while(count--)
printf("%c", bits[count]);
printf("\n");
}
return 0;
}