鱼C论坛

 找回密码
 立即注册
查看: 2328|回复: 9

[已解决]十进制转换二进制的函数出现问题

[复制链接]
发表于 2017-12-23 20:12:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 iulus 于 2017-12-23 20:24 编辑

#用x不断除以2的方法,倒着数上去


def bin2(x):
        bi=1                                                #bi用来记录每次与余数要乘的位数
        while True:
                r=x%2                                #r是余数
                x=x//2                                #x每次除以2
                result=0                            #result是结果
                if x!=0:
                        result=r*bi+result      #result:每次的余数乘以位数然后加起来
                        bi*=10
                        continue                        #x不等于0继续循环
                if x ==0:
                        return result                #最后返回result
                        break                        #x=0结束循环
x=int(input('请输入'))
print(bin2(x))


最佳答案
2017-12-23 20:51:19
  1. def bin2(x):
  2.         bi=1
  3.         result=0
  4.         while True:
  5.                 r=x%2                                
  6.                 x=x//2                                                         
  7.                 if x!=0:
  8.                         result=r*bi+result     
  9.                         bi*=10
  10.                         continue                        
  11.                 if x ==0:
  12.                         print(result)
  13.                         result=r*bi+result
  14.                         return result               
  15.                         break                     
  16. x=int(input('请输入'))
  17. print(bin2(x))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-12-23 21:01:31 | 显示全部楼层
本帖最后由 iulus 于 2017-12-23 21:08 编辑


谢谢你,根据你的提示我改好了
但是你给出的代码中有些是多余的

def bin2(x):
        bi=1
        result=0     #我把这一行拿到了循环的外边了
        while True:
                r=x%2
                x=x//2
                if x!=0:
                        result=r*bi+result
                        bi*=10
                        continue
                if x ==0:
                        result=r*bi+result
                        return result
                        break
x=int(input('请输入'))
print(bin2(x))


我之前出的错误在于:  result这一行如果在循环的开头的话,在每次进入循环的时候都要给result赋值0,
再次感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-23 20:20:32 | 显示全部楼层
本帖最后由 iulus 于 2017-12-23 20:24 编辑

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-23 20:34:35 | 显示全部楼层
什么问题?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-23 20:40:44 | 显示全部楼层

打印出来永远是 0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-23 20:50:39 | 显示全部楼层
iulus 发表于 2017-12-23 20:40
打印出来永远是 0

代码写错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-23 20:51:19 | 显示全部楼层    本楼为最佳答案   
  1. def bin2(x):
  2.         bi=1
  3.         result=0
  4.         while True:
  5.                 r=x%2                                
  6.                 x=x//2                                                         
  7.                 if x!=0:
  8.                         result=r*bi+result     
  9.                         bi*=10
  10.                         continue                        
  11.                 if x ==0:
  12.                         print(result)
  13.                         result=r*bi+result
  14.                         return result               
  15.                         break                     
  16. x=int(input('请输入'))
  17. print(bin2(x))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-23 21:05:20 | 显示全部楼层
iulus 发表于 2017-12-23 21:01
谢谢你,根据你的提示我改好了
但是你给出的代码中有些是多余的

我那段代码是忘记把调试那行给去掉了。
还有,你这个代码还是错的。
你对照一下我和你的,你少了一行。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-23 21:11:42 | 显示全部楼层
°蓝鲤歌蓝 发表于 2017-12-23 21:05
我那段代码是忘记把调试那行给去掉了。
还有,你这个代码还是错的。
你对照一下我和你的,你少了一行。

知道了,这一点我倒是疏忽了,如果判定x=0之后立刻就返回result,就会把最后一个余数漏掉。
哈哈,谢谢大神细心地指点!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-23 21:13:04 | 显示全部楼层
iulus 发表于 2017-12-23 21:11
知道了,这一点我倒是疏忽了,如果判定x=0之后立刻就返回result,就会把最后一个余数漏掉。
哈哈,谢谢 ...

不用客气。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-5 01:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表