解题思路:用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 人评分
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:784 |
点我有惊喜!你懂得!浏览:2248 |
校门外的树 (C语言代码)浏览:751 |
C语言程序设计教程(第三版)课后习题10.1 (C语言代码)浏览:1517 |
【偶数求和】 (C++代码)浏览:785 |
【绝对值排序】 (C++代码)浏览:720 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:1071 |
WU-蓝桥杯算法提高VIP-企业奖金发放 (C++代码)浏览:1267 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:863 |
Hello, world! (C++代码)浏览:1778 |