向后打印这个二进制代码。在C中 #包括 #包括 /*转换为二进制*/ int main() { 无符号整数小数=0; printf(“输入要转换为二进制的数字。\t”); scanf(“%d”、&decimalNUM); fflush(stdin); baseConv(小数); getchar(); 返回0; } baseConv(无符号整数n){ 如果(n==0); 而(n>0){ printf(“%d”,n%2); n=n>>1; } 返回0; }
我现在知道怎么做了,但它是反印的。我该如何反转它呢?如果您想反转这样的操作,一种方法是使用堆栈数据结构 不要打印主循环中的值,而是将它们推到堆栈中 然后,完成后,从堆栈中弹出一个项目并打印它,然后继续这样做,直到堆栈为空。堆栈被称为后进先出结构(last-in,first-out),它是一种方便的存储方式,用于以后按与生成顺序相反的顺序进行检索 伪代码:向后打印这个二进制代码。在C中 #包括 #包括 /*转换为二进制*/ int main() { 无符号整数小数=0; printf(“输入要转换为二进制的数字。\t”); scanf(“%d”、&decimalNUM); fflush(stdin); baseConv(小数); getchar(); 返回0; } baseConv(无符号整数n){ 如果(n==0); 而(n>0){ printf(“%d”,n%2); n=n>>1; } 返回0; },c,binary,base,C,Binary,Base,我现在知道怎么做了,但它是反印的。我该如何反转它呢?如果您想反转这样的操作,一种方法是使用堆栈数据结构 不要打印主循环中的值,而是将它们推到堆栈中 然后,完成后,从堆栈中弹出一个项目并打印它,然后继续这样做,直到堆栈为空。堆栈被称为后进先出结构(last-in,first-out),它是一种方便的存储方式,用于以后按与生成顺序相反的顺序进行检索 伪代码: #include <stdio.h> #include <math.h> /* converts to binary
#include <stdio.h>
#include <math.h>
/* converts to binary */
int main()
{
unsigned int decimalNUM = 0;
printf("Enter a number to be converted to binary.\t");
scanf("%d", &decimalNUM);
fflush(stdin);
baseConv(decimalNUM);
getchar();
return 0;
}
baseConv(unsigned int n){
if (n == 0) ;
while (n > 0){
printf("%d", n%2);
n = n >> 1;
}
return 0;
}
我还要补充一点,声明:
def baseConv (n):
create stack s
while n > 0:
push n % 2 onto s
n = n >> 1
while not empty(s):
pop n from s
print n
根本没有什么用处。你可以避免堆栈 您是向后的,因为您从最低的数字开始,转换它,然后打印它 如果你先算出最高的部分,你可以反过来 为基数查找整数的最大除数,例如二进制0x8000 把你的数字除以这个除数 如果为0,则不打印任何内容。。如果不是,请开始打印 将除数除以基数。。。。例如二进制除数>>=1;
在除数为0之前,您可以通过打开所有位(~无符号(0)),然后将该值与右移的值进行异或运算来获得最高有效位的值。然后,测试从msb到lsb的每个位
if (n == 0);
分配一个足够大的字符串并用“0”填充,将1按相反顺序放入字符串中,找到第一个“1”,然后从该点开始打印字符串
for (unsigned x = ~unsigned(0) ^ (~unsigned(0) >> 1); x; x >>= 1)
putchar(x & n ? '1' : '0');
我将数字放入一个数组中;然后向后打印数组(将数组初始化为所有零)。你会得到一些额外的前导零;但是对于二进制数来说这并不奇怪。步骤1:在发布代码之前,修复编译器警告。第二步:在你的问题中加入代码——除非它比这多出很多行。
int cursor, lead_one;
char *buffer = malloc(sizeof(unsigned int)*8 + 1);
memset(buffer, '0', sizeof(unsigned int)*8);
buffer[sizeof(unsigned int)*8] = 0;
for (lead_one = cursor = sizeof(unsigned int)*8 - 1; n > 0; cursor--) {
if (n & 1) {
buffer[cursor] = '1';
lead_one = cursor;
}
n >>= 1;
}
printf(buffer+lead_one);