【发布时间】:2018-11-22 04:44:41
【问题描述】:
我编写了用于获取整数的二进制形式的代码。它适用于 1 或 10 之类的输入。但是,它对于 256 之类的输入却失败了。(它给出了 0000000 秒的输出并错过了那个)。
#include <stdio.h>
#include <math.h>
int number_of_binary_digits_required(int n){
return ceil(log(n))+1;
}
void print_array(int * a, int n){
int i = 0;
for (;i<n;i++){
printf("%d\t", a[i]);
}
}
int main(){
int num = 256;
int binary[100];
int n = number_of_binary_digits_required(num);
int bin_digits = n-1;
while (num){
int temp = num%2;
num = num / 2;
binary[bin_digits] = temp;
//printf("%d\n", bin_digits);
bin_digits--;
}
print_array(binary, n);
//printf("%d", number_of_binary_digits_required(num));
//for(bin_digits = 0;bin_digits < number_of_binary_digits_required(num);bin_digits++)
//printf("%d",binary[bin_digits]);
}
为什么会出现问题以及如何解决?
谢谢!
【问题讨论】:
-
你甚至不需要提前计算位数。您可以将来自
num % 2的数字写入缓冲区直到(num /= 2) == 0,然后以相反的顺序打印它们,或者以相反的顺序将它们存储在缓冲区中。 -
@WeatherVane 谢谢,我试图以正向方式进行操作..正确地使用反向方式进行操作..
-
我正在编辑你输入的内容:你可以以相反的顺序存储它们而无需知道有多少。从足够大的缓冲区的末尾开始,然后从您停止的地方打印缓冲区。如果那是在
binary[90],那么你可以printf("%s", binary + 90);但是你需要一个NUL终止符,并且在每个数字进入缓冲区时添加'0'。