C/C++ code#include
#include
#include
int decimal_to_binstring(void *dec, int len, char *bin, int size) {
if (bin == NULL || size < (len << 3) + 1) {
return -1;
}
int off = 0;
/* 64 or 32 ?*/
if (sizeof(long) == 4) { /* 32 */
unsigned int idec = *(unsigned int*)dec;
unsigned long long lldec = *(unsigned long long*)dec;
#define TEMPLATE_CODES(val) \
while (val != 0) { \
bin[off++] = '0' + (val & 1); \
val >>= 1; \
}
switch (len) {
case 4:
TEMPLATE_CODES(idec);
break;
case 8:
TEMPLATE_CODES(lldec);
break;
default:
return -1;
}
} else {
unsigned int idec = *(unsigned int*)dec;
unsigned long ldec = *(unsigned long*)dec;
switch (len) {
case 4:
TEMPLATE_CODES(idec);
break;
case 8:
TEMPLATE_CODES(ldec);
break;
default:
return -1;
}
}
/* complete all bits '0' */
memset(bin + off, '0', (len << 3) - off);
/* reverse the binary string*/
char *left = bin;
char *right = bin + (len << 3) - 1;
while (left < right) {
char temp = *left;
*left = *right;
*right = temp;
++ left, -- right;
}
bin[len << 3] = '\0';
return (len << 3); /*binary string's length*/
}
int main(int argc, char* const argv[]) {
int idec = 0x0034;
long ldec = 0x0056;
char bin[65];
if (decimal_to_binstring(&idec, sizeof(idec), bin, sizeof(bin)) != 0) {
printf("0x%x => %s\n", idec, bin);
}
if (decimal_to_binstring(&ldec, sizeof(ldec), bin, sizeof(bin)) != 0) {
printf("0x%x => %s\n", ldec, bin);
}
return 0;
}
------解决方案--------------------
那不就是输入二进制了么C/C++ code#include
void d(unsigned int n)
{
if (n > 0)
{
d(n / 2);
printf("%d", n % 2);
}
}
int main()
{
int i;
scanf("%d", &i);
d(i);
printf("\n");
return 0;
}