我将十进制转换为二进制,我需要输出为32(位?)长。这是我想要的,但我没有得到前导零,例如,输入“3”给我“11”,而不是“00000000000000000000000000000011”
int i = 0;
int bi[31];
while(num > 0){
if(num % 2 == 0)
bi[i] = 0;
else
bi[i] = 1;
i++;
num = num / 2;
}
for(int j = i - 1; j >= 0; j--){
printf("%d", bi[j]);
}
我原本以为这就像将打印输出改为从31循环到0一样简单并打印出数组的所有内容,假设零将在我的bi []数组中的所有内容中。但这不起作用:))
由于
答案 0 :(得分:2)
for(int j = 0; j < 32; j++) // this for loop is initializing all the places with zeroes
{
b[j] = 0;
}
i = 31 // starting from the leftmost place of the array
while(num > 0) //as the values in the array gets updated the remaining place is left with trailing
{
if(num % 2 == 0)
bi[i] = 0;
else
bi[i] = 1;
i--;
num = num / 2;
} zeroes
for(int j = 0; j < 32; j++){
printf("%d", bi[j]);
}
答案 1 :(得分:2)
由于此问题的LIFO性质,请考虑递归(基于堆栈)解决方案:
#include <stdio.h>
#include <limits.h>
void recFoo(int num,int index)
{
if (index > 0)
recFoo(num/2, index-1);
printf("%d", num%2);
}
void foo(int num)
{
recFoo(num, sizeof(num)*CHAR_BIT);
}
答案 2 :(得分:0)
共振是因为第一个循环仅循环两次,这是输入中的最高设置位。第一个循环需要无条件地循环你想要的位数,打印循环也是如此。
答案 3 :(得分:0)
首先,你需要一个32长阵列。试试这个......初始化你的数组
void foo (int num) {
int i = 31;
int bi[32] = {0};
while(num > 0){
if(num % 2 == 0)
bi[i] = 0;
else
bi[i] = 1;
i--;
num = num / 2;
}
for(int j = i - 1; j >= 0; j--){
printf("%d", bi[j]);
}