论坛首页 编程语言技术论坛

妙趣横生的python 算法 之 2进制转10进制

浏览 8492 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-05-04  
# -*- coding:utf8 -*-
import os
import sys

#2进制 to 10进制
def binary2decimal(binary = "0001"):
    '''
    根据栈后进先出的特性,我们使用栈完成2 to 10 的 转换
    算法:
        公式: Xn,Xn-1,.....X1,X0 = X0 * 2 ** 0,X1 * 2**1,.......Xn-1 * 2 ** n-1.Xn *2 ** n
        1)将栈有大到小压入栈。
        2)逐个出栈,* 2 ** i ,这里i为出栈元素的个数,并将数据累加。
        3) 打印出结果。
    '''
    bs = binary
    #定义Stack
    stack = []
    sum = 0
    #初始化栈
    for i in xrange(len(bs)):
        stack.append(bs[i])
    #开始计算
    for i in xrange(len(stack)):
        value  = stack.pop()
        sum +=  int(value) * ( 2 ** i )
    
    print  "decimal is : %s"  % sum
    
#运行脚本
if __name__ =="__main__":
    binary2decimal("0111")
   发表时间:2010-05-04  
"0111".to_i(2) #=> 7
0 请登录后投票
   发表时间:2010-05-04  

int('0111',2)
 
0 请登录后投票
   发表时间:2010-05-05  
这个我可能没有表达明确,不好意思啊
这个是通过2-》10 学习栈的数据结构 :)
0 请登录后投票
   发表时间:2010-05-05  
这个太c化了,python没必要写那么长的...

bin=lambda s: sum( [ (ord(v)-48)<<i for i,v in enumerate(s[::-1]) ]  )


0 请登录后投票
   发表时间:2010-05-08  
edisonlz 写道
这个我可能没有表达明确,不好意思啊
这个是通过2-》10 学习栈的数据结构 :)


一点也不妙趣横生,为什么要用栈啊。。。倒着遍历不就行了 binary[::-1]
0 请登录后投票
   发表时间:2010-05-09  
lzyzizi 写道
edisonlz 写道
这个我可能没有表达明确,不好意思啊
这个是通过2-》10 学习栈的数据结构 :)


一点也不妙趣横生,为什么要用栈啊。。。倒着遍历不就行了 binary[::-1]

这位老兄说得是,学习下数据结构倒也无可厚非,但内容真的是一点也不“妙趣横生”啊……
0 请登录后投票
   发表时间:2010-05-12  
确实,搞复杂了,倒序就行
0 请登录后投票
   发表时间:2010-05-14  
确定复杂了点!
0 请登录后投票
   发表时间:2010-05-29  
在讨论中进步啊,愈加清晰了
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics