-
Notifications
You must be signed in to change notification settings - Fork 0
/
Minitask1_first.py
52 lines (50 loc) · 1.51 KB
/
Minitask1_first.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# Написать программу, считающую количество
# выставленных битов в произвольном целом числе.
#
# Использовать приведение к строке и bin нельзя.
#
# Замечание: программа должна корректно работать с
# отрицательными числами, с учетом представления в
# дополнительном коде. signed бит считать один раз.
#
# Пример: 10 -> 2 (т.к. 10 - это 0...1010)
# -123 -> 3 (т.к. -123 - это 1...0000101)
def mybin(a,result):
if(result!=1):
while(a!=0):
ost=a%2
if(ost==1):
result+=1
a//=2
return result
else:
arr=makeyourarray(a)
arr=negativeN(arr)
arr[0]=arr[0]+1
for i in range(1,len(arr)):
if(arr[i-1]==2):
arr[i-1]=0
arr[i]=arr[i]+1
result+=arr.count(1)
return result
def makeyourarray(a):
arr=[]
while (a != 0):
ost = a % 2
arr.append(ost)
a //= 2
return arr
def negativeN(arr):
for i in range(len(arr)):
if(arr[i]==1):
arr[i]=0
else:
arr[i]=1
return arr
n=int(input("Enter your number:"))
result=0
if(n<0):
result+=1
n=abs(n)
result=mybin(n,result)
print("Your number have this much bites="+str(result))