对于一个数字,如果它各个位数相加的和,等于在二进制下其各个位数相加的和,就称其为幸运数。
例如123,各个位数相加是6;123在二进制下是1111011,各个位数相加是6,因此123是幸运数。
现在对于一个数字k,我们希望求出,所有小于等于k的正整数中,有多少个幸运数,并将其输出。
代码(python3):
def sumnum(a):
st=str(a)
sum = 0
for i in range(len(st)):
b = int(st[i])
sum = sum + b
return sum
#print(sumnum(15)) test = 6
def twsum(a):
sum = 0
while a != 1 :
if a%2 :
sum = sum + 1
a = (a - 1)/2
else:
a = a / 2
return sum + 1
#print(tw(7),tw(9),tw(13)) test =3,2,3
k = int(input("请输入:"))
num = 0
list=[]
for i in range(1,k+1):
if sumnum(i) == twsum(i):
num=num+1
list.append(i)
#print(k)
print("幸运数个数是",num)
print("它们分别是:")
for i in list:
print (i)