我有一个编写程序,用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出现在我的输出中。我怎么能这样做?
答案 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);
如果字符数或填充字符是可变的,则需要删除列表并做一些更聪明的事情。