无法通过十进制将测试用例传递给二进制转换器

时间:2018-09-02 09:02:42

标签: c

我已经编写了将十进制转换为二进制数的代码,但是我在输入一组4个测试用例并使它们通过时遇到麻烦。

有人可以帮我解决我做错的事情吗?

#include <stdio.h>

int main(void) {
  int quotient, i, j, bin[16] = {0};
  int decimal1, decimal2, decimal3, decimal4;
  decimal1 = 123;
  decimal2 = 1024;
  decimal3 = 43981;
  decimal3 = 2005;

  scanf("%d", &quotient);

  i = 0;
  if (quotient == 0) {
    bin[i++] = 0;
  }
  while (quotient != 0) {
    bin[i] = quotient % 2;
    quotient = quotient / 2;
    i = i + 1;
  }

  printf(" The Binary value is: ");
  for (j = 15; j >= 0; j--)
    printf("%d", bin[j]);

  return 0;
}

1 个答案:

答案 0 :(得分:0)

#include <stdio.h>
#include <limits.h>


char *tobin(long value, char *buff, int type)
{
    union 
    {
        long l;
        unsigned long lu;
    }lunion;
    char *savedptr = buff;
    char *reverse = buff;
    char savedchar;

    if(type)
    {
        if(value == LONG_MIN) 
        {
            lunion.lu = 1UL << (sizeof(value) * 8) - 1;
        }
        else 
        {
            lunion.lu = (value < 0) ? -value : value; 
        }
    }
    else
    {
        lunion.l = value;
    }
    do
    {
        *buff++ = (lunion.lu & 1) ? '1' : '0';
        lunion.lu >>= 1;
    }while(lunion.lu);
    if(type && value < 0)
    {
        *buff++ = '-';
    }
    *buff-- = 0;
    while(buff > reverse)
    {
        savedchar = *buff;
        *buff-- = *reverse;
        *reverse++ = savedchar;
    }
    return savedptr;
}


int main()
{
    char x[100];
    printf("%ld = %s\n", LONG_MIN, tobin(LONG_MIN, x, 1));
    printf("%ld = %s\n", LONG_MIN, tobin(-1, x, 1));
    printf("%ld = %s\n", LONG_MIN, tobin(-400, x, 1));
    printf("%ld = %s\n", 0L, tobin(0, x, 1));
    printf("%ld = %s\n\n\n", LONG_MAX, tobin(LONG_MAX, x, 1));

    printf("%ld = %s\n", LONG_MIN, tobin(LONG_MIN, x, 0));
    printf("%ld = %s\n", LONG_MIN, tobin(-1, x, 0));
    printf("%ld = %s\n", LONG_MIN, tobin(-400, x, 0));
    printf("%ld = %s\n", 0L, tobin(0, x, 0));
    printf("%ld = %s\n", LONG_MAX, tobin(LONG_MAX, x, 0));
}