C中的二进制数输出

时间:2013-11-08 21:10:24

标签: c binary

我有一个编写程序,用C编程语言将十进制数转换为二进制数。

这是我写的代码:

#include <stdio.h>
#define MAX_LEN 1000

void translate_dec_bin(char s[]){
    unsigned int decNum;
    sscanf_s(s, "%d", &decNum);

    while (decNum > 0){
        printf("%d", decNum % 2);
        decNum = decNum / 2;
    }
    printf("\n");
}

main(){
    char s[MAX_LEN];
    char c='\0';
    int count=0;
    printf("enter a nunber\n");
    while (c < MAX_LEN && ((c = getchar()) != EOF) && c != '\n'){
        s[count] = c;
        ++count;
    }
    translate_dec_bin(s);
}

然而,当输入为1时,我得到的输出是1而不是0001.换句话说,我希望0出现在我的输出中。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

首先,阅读mah的评论:虽然他建议用一枚核导弹击中一只苍蝇,但他建议你采取正确的做法。

但在这种情况下,你的问题很简单:你在translate_dec_bin函数中的循环结束了,因为它没有什么可做的。

考虑一下:你的情况是“当decNum大于0,打印1或0”时,对吗? 我想你现在知道,如果你除了整数,那么在C中,余数是有界的,所以1/2 = 0。

现在看看你的代码:当你给出参数“1”时,循环只迭代一次,所以你只得到输出中的一个字符。

如果您想要更多字符,则需要更多条件。我留给你提出它们,我不是那个声誉很大的东西,因为马建议:)

顺便说一下:你无法在unsigned int中输入1000位数的长数字,这就是你要做的事情。

答案 1 :(得分:0)

假设您已经计算了十进制数 不使用打印格式的基本思想如下:

char* list[] = {"0000", "000", "00", "0", ""};

char* leading_of(int num) {
   int v = 0;
   while(num > 0 && v < 4){
      num = num /10;
      v++;
   }
   return list[v];
}

printf("%s%d", leading_of(decNum), decNum);

如果字符数或填充字符是可变的,则需要删除列表并做一些更聪明的事情。