免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2816 | 回复: 7
打印 上一主题 下一主题

妙趣横生的python 算法 之 2进制转10进制 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-24 17:23 |只看该作者 |倒序浏览
  1. # -*- coding:utf8 -*-
  2. import os
  3. import sys

  4. #2进制 to 10进制
  5. def binary2decimal(binary = "0001"):
  6.     '''
  7.     根据栈后进先出的特性,我们使用栈完成2 to 10 的 转换
  8.     算法:
  9.         公式: Xn,Xn-1,.....X1,X0 = X0 * 2 ** 0,X1 * 2**1,.......Xn-1 * 2 ** n-1.Xn *2 ** n
  10.         1)将栈有大到小压入栈。
  11.         2)逐个出栈,* 2 ** i ,这里i为出栈元素的个数,并将数据累加。
  12.         3) 打印出结果。
  13.     '''
  14.     bs = binary
  15.     #定义Stack
  16.     stack = []
  17.     sum = 0
  18.     #初始化栈
  19.     for i in xrange(len(bs)):
  20.         stack.append(bs[i])
  21.     #开始计算
  22.     for i in xrange(len(stack)):
  23.         value  = stack.pop()
  24.         sum +=  int(value) * ( 2 ** i )
  25.    
  26.     print  "decimal is : %s"  % sum
  27.    
  28. #运行脚本
  29. if __name__ =="__main__":
  30.     binary2decimal("0111")
复制代码

论坛徽章:
0
2 [报告]
发表于 2011-01-24 20:07 |只看该作者
本帖最后由 a515200 于 2011-01-25 16:39 编辑

这是我以前写的10转2进制的代码
  1. def main(x,k=2):
  2.         def root(x,y=[],k=2):
  3.             if x>=0:
  4.                if x in [0,1]:
  5.                   y.append(x)
  6.                   return int(''.join([str(x) for x in y[::-1]]))
  7.                else:
  8.                   y.append(x%k)
  9.                   return root(x/k)
  10.             else:
  11.                   print u"请输入一个大等于0的数"
  12.         return root(x,k=2)
复制代码

论坛徽章:
0
3 [报告]
发表于 2011-01-25 05:34 |只看该作者
这东西一个int就解决的……你给写成30行……

用Python写这种东西完全得不偿失……无论是执行效率还是开发效率……

论坛徽章:
0
4 [报告]
发表于 2011-01-25 10:04 |只看该作者
本帖最后由 a515200 于 2011-01-25 10:07 编辑

对于你,python的任何东西都是没效率的,你的话暗示你在污蔑, 还是你并不懂,只是听别人说"高级语言"效率低,就原话不动的拿出来
LZ使用栈来实现这些操作,本身就值得学习,你学过"数据结构"没?

论坛徽章:
0
5 [报告]
发表于 2011-01-25 13:26 |只看该作者
回复 4# a515200

1:难道这30行脑残代码能比
  1. int('110101',2)
复制代码
写得快?还是运行的快?

2:这明显就是不知道从哪儿搬运来的……也不写个转帖……

3:Python有现成的栈实现collections.deque

4:真不好意思,从来没听说过什么数据结构,学了人是不是会变迟钝啊

论坛徽章:
0
6 [报告]
发表于 2011-01-25 15:53 |只看该作者
残酷的讨论,必能有漂亮的结果,科技的进步,语言的升华

论坛徽章:
0
7 [报告]
发表于 2011-01-25 15:58 |只看该作者
  

用来练下手也未尝不可。。。
真正实际应用当然要用标准库了

论坛徽章:
0
8 [报告]
发表于 2011-01-25 16:41 |只看该作者
仁兄一看就知是学网络编程的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP