1

例如,当我给出:-2 或 -8 时,我得到 110、11000。但我想得到 10、1000,因为它必须使用最小的二进制数。所以我必须用另一种方式来处理消极的事情。我试图交换 1 和 0 直到达到 LSB 1,但我找不到方法。

(帮助你:dekadikos = demical,diadikos = binary,boith = assistant)

 dekadikos = input()
 while dekadikos != "end" :
     dekadikos = int(dekadikos)  
     if dekadikos > 0 :
         diadikos = bin(dekadikos)
         diadikos = (diadikos[2:])
         n = int(len(diadikos)) + 1
         print(diadikos.zfill(n))
     elif dekadikos == 0 :
         diadikos = bin(dekadikos)
         diadikos = (diadikos[2:])
         print(diadikos)
     else :
         dekadikos = abs(dekadikos)
         diadikos = bin(dekadikos)
         diadikos = (diadikos[2:])
         n = int(len(diadikos)) + 1
         diadikos = diadikos.zfill(n)
         boithdekadikos = 2**n - dekadikos
         diadikos = bin(boithdekadikos)
         diadikos = diadikos[2:]
         print (diadikos)
 dekadikos = input()
4

1 回答 1

1

您可以通过对最后一个块的代码进行两次更改来解决它else(注释):

else :
  dekadikos = abs(dekadikos)
  diadikos = bin(dekadikos-1) # subtract 1
  diadikos = (diadikos[2:])
  n = int(len(diadikos)) + (dekadikos>1) # add 1 except for 1
  diadikos = diadikos.zfill(n)
  boithdekadikos = 2**n - dekadikos
  diadikos = bin(boithdekadikos)
  diadikos = diadikos[2:]
  print (diadikos)

不过,要达到您想要的结果,这似乎是一个冗长的方法。一方面,您可以使用format(dekadikos, 'b')来获取不带0b前缀的数字的二进制表示。

您可以改为这样做,包括正数、零数和负数:

dekadikos = int(dekadikos)
diadikos = '0' + format(abs(dekadikos)-(dekadikos<0), 'b')
if dekadikos == 0:
    diadikos = '0'
elif dekadikos < 0:
    diadikos = format(2**(len(diadikos)-(dekadikos==-1)) + dekadikos, 'b')
print (diadikos)
于 2016-11-03T21:18:15.753 回答