十进制转二进制

大家应该都做过这么一个问题吧,将任意的十进制数转换成相应的二进制或者八进制或者十六进制,这个问题不难,可以用多种方法解决,今天,笔者就三种解法剖析方法其中对栈思想的应用。

先贴出代码:

1.递归操作

view plaincopy to clipboardprint?
/*the function of common manipulation */   
void int_to_binary1(unsigned int num)   
{   
  int temp;   
    
  temp = num%2; /*the first number shoud be printed at the last,because this function is a recursion*/   
  if (0 != num/2)   
  int_to_binary1(num/2);   
  putchar ('0'+temp); /*print the date*/   
}   
 

2.位操作
view plaincopy to clipboardprint?
/*the function of bit manipulation */   
void int_to_binary2(unsigned int num)   
   
{   
  char str[17]; /*str[16] store the '\0'*/   
  int i = 16-1; /*the limit length of the binary number*/   
   
  while (-1 != i)   
  {   
  str[i] = (num & 01) + '0';   
  num >>= 1;   
  i--;   
  }   
  str[16] = '\0';   
  puts(str);   
   
}   
 
3.栈操作

view plaincopy to clipboardprint?
/*the function of stack manipulation*/   
void int_to_binary3(unsigned int num)   
   
{   
  char temp;   
  SeqStack binary;   
   
  InitStack (&binary);   
  while (num >=1)   
  {   
  Push_Stack(&binary,(num%2)+'0');   
  num /= 2;   
  }   
   
  while (!Is_Empty(&binary))   
  {   
  Pop_Stack (&binary,&temp);   
  putchar(temp);   
  }   
  putchar(10);   
   
}   
分析上述三种方法:

第三种方法:

栈操作是直接应用栈的技术进行操作,很容易看出来;



第一种方法:

利用的是递归函数,大家都知道,递归函数在进行递归的时候都必须有一个递归出口,否则就不能正常退出程序,当函数进行第一次递归的时候,由于没有到达出口条件,所以保留本层参数和结果,将其push(也就是所说的函数调用栈)就这样,一层一层的push,知直到到达出口条件,此时函数调用栈进行POP,也叫退层。利用这个原理,将二进制零幺代码逆序输出,这样就达到了预期的目的.

第二种方法:

这种方法,虽说没有利用栈,但是此方法的效率和直观性是显而易见的,直接进行的位操作,也就是在内存中直接就是对零幺的翻译,在加上移位操作,更加灵活,此法是我最喜欢用的,简介直观。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值