uq_90700571634


私信TA

用户名:uq_90700571634

访问量:67

签 名:

等  级
排  名 40210
经  验 377
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:用bin()转变为2进制,分两种情况111000和1100111000110,前者增加一位1,后者从后数,遇到第一个01,变为10,并将遇到的1变道最后

注意事项:

参考代码:

def f(n):

    sn=bin(n)

    sn=sn[2:]

    listn=[int(i) for i in sn]

    count=0

    for i in range(len(listn)):

        count+=listn[i]

    #111000

    temp=0

    l=len(listn)

    for i in range(count):

        temp+=listn[i]

    if temp==count:

        listn=[0]*(l+1)

        listn[0]=1

        for i in range(l,l-count+1,-1):

            listn[i]=1

    else:

        t=0

        val=0

        for i in range(l-1,1,-1):

            if listn[i]==1:

                t+=1

                print(t)

            if listn[i]==1 and listn[i-1]==0:

                listn[i-1],listn[i]=1,0

                val=i

                break

        for i in range(l-1,l-t,-1):

            listn[i]=1

            print(i,"  ",listn[i])

        for i in range(l-t,val,-1):

            listn[i]=0


    binstr =''.join(str(i) for i in listn)

    value=int(binstr,2)

    print(value)

    print(bin(value))

    print(n,"  ",sn,count)


while 1:

    n=int(input())

    if n==0:

        break

    else:

        f(n)


 

0.0分

0 人评分

  评论区

  • «
  • »