2016-11-29 80 views
0

我创建的代码只是从用户获得一个十进制数并将其转换为二进制。我试图从0到输入的十进制数字的二进制数制成一个二进制计数器。二进制数的位存储在一个数组中,每一位都有自己的位置。我明白,我将不得不作出一个二维数组来做到这一点,但我不知道如何或在哪里实施这个二维C在二维计数器

#include <stdio.h> 
#include <math.h> 

int main(void){ 

    int binary,loop_number,i; 
    printf("Enter in your binary number :"); 
    scanf("%d", &binary); 

    //loop number calculates the number of bits of the binary number 
    loop_number = log2(binary)+1; 
    int binary_array[binary][loop_number]; 
    int newarray[binary][loop_number]; 

    for(int n=0;n<binary;n++) { 
     for(i=0;i<loop_number;i++) { 
      if(n==1){ 
       binary_array[n][i]=1; 
      } else if(n%2==0) { 
       binary_array[n][i]=0; 
      } else if(n==0) { 
       binary_array[n][i]=0; 
      } else { 
       binary_array[n][i]=1; 
      } 
     n = n/2; 
     } 

     //the binary array of bits is backwards here so im going to put the bits the correct way 

     for(int n=0;n<binary;n++) { 
      for(i = 0; i < loop_number; i++){ 
       newarray[n][i] = binary_array[n][loop_number-i-1]; 
      } 
     } 
    } 

    printf("\n\n"); 
    for(int n=0;n<binary;n++){ 
     for(i=0;i<loop_number;i++){ 
      printf("%d",newarray[n][i]); 
     } 
     printf("\n"); 
    } 
} 
+1

嗯,转换为二进制?为什么你需要一个二维数组?我认为一个小循环会做这样的事情:'for(i = 0,bit = 1; bit Holger

回答

0

你的代码是非常难读,我有基本的建议,以改善你的代码:

  1. 缩进代码。
  2. 使用字符之间的多个空格,比如写在for循环这样for(n = 0; n < binary; n++)而不是for(n=0;n<binary;n++)
  3. 最初的gcc,因为你有最后的两个for循环后两个额外的大括号不编译代码。
  4. 仅当我们添加-std = c99和-lm标志时,gcc才会编译您的代码。首先是因为你已经直接在循环中写入for循环索引的声明。第二个是因为LOG 2功能(调查为何试试这个gcc will not properly include math.h

的问题是在第一个双循环:

for(n = 0; n < binary; n++){ 
    for(i = 0; i < loop_number; i++){ 

     // Use a switch instead of a cascade of else-if 
     if(n==1){ 
      binary_array[n][i]=1; 
     } 
     else if(n%2==0){ 
      binary_array[n][i]=0; 
     } 
     else if(n==0){ 

      binary_array[n][i]= 0; 

     }else{ 
      binary_array[n][i]=1; 
     } 

     n = n/2; // Here we have an infinite loop because n is never equal to binary, at each iteration the n counter is    divided for 2 
    } 
} 

所以,我不明白你的算法想要实施。我认为算法是这样的:dividedBy2

你不需要一个二维数组,而是尝试使用堆栈。我写了我自己的算法实现,我希望这可以帮助你。我认为这段代码正确地实现了算法,但如果你会发现一些错误,请告诉我。 http://pastebin.com/uC5zp2Va