使用递归将自然数转换为二进制

时间:2014-05-30 20:31:43

标签: recursion

我必须将自然数转换为二进制,但使用递归。我做了但没有递归:

int main (){
  int n,pot,bin;

  printf("Digite o Numero:\n");
  scanf("%d",&n);
  pot=1;
  bin=0;
  while (n>0){
    bin+=(n%2)*pot;
    pot*=10;
    n= n/2;
  }

  printf ("%d",bin);
  getch();

  return 0;
}

2 个答案:

答案 0 :(得分:0)

等等(假设n是正面的!):

void getBin(uint n, int pot, int* bin) {
    *bin += (n%2)*pot;
    n /= 2;
    if (n <= 0) {
       return;
    }
    getBin(n, pot * 10, bin);
}

答案 1 :(得分:0)

为了安全起见,这不会将正数转换为二进制数。它创建一个数字,当在基数10中显示时,看起来像基数2中的参数。 更好的解决方案是将数字转换为给定基数中的char *。

int getBin(int n) {
  return getBinHelper(n, 1, 0);
}

int getBinHelper(int n, int e, int acc) {
  return n == 0 ?
         acc : 
         getBinHelper( n/2, e*10, n&1 ? acc+e : acc);
}