0

我有一个任务是用 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 出现在我的输出中。我怎样才能做到这一点?

4

2 回答 2

1

首先,请阅读 mah 的评论:虽然他建议用核导弹击中苍蝇,但他建议您采用正确的方法。

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

想一想:你的条件是“当 decNum 大于 0 时,打印 1 或 0”,对吗?我想你现在知道了,在 C 语言中,如果你除整数,余数被省略,所以 1/2=0。

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

如果你想要更多的字符,你需要更多的条件。我把它留给你来想出它们,我不像 mah 建议的那样渴望名誉:)

顺便说一句:您无法将 1000 位长数字放入无符号整数中,这就是您要尝试做的事情。

于 2013-11-08T21:35:56.290 回答
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);

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

于 2013-11-08T21:32:08.850 回答