w1과 w2는 각 수를 이진수로 바꾸었을 시의 1의 개수이고, d는 두 수를 비교했을 시의 같은 자리 수에서 각각 0과 1이 따로 나오는 개수입니다.
최대한 풀었고 답도 맞는 것 같는데 어딘가 틀렸다고 하네요. 혹시 도와주실 수 있으면 부탁드립니다.
testcase= int(input())
for i in range(testcase):
num1, num2 = map(int, input().split())
b1 = int(bin(num1)[2:])
b2 = int(bin(num2)[2:])
s1 = bin(num1)[2:]
s2 = bin(num2)[2:]
ans1 = 0
ans2 = 0
while b1 :
b1 //= 10
ans1 += 1
while b2 :
b2 //= 10
ans2 += 1
w1 = 0
w2 = 0
d = 0
for j in range(ans1):
if s1[j] == '1' :
w1 += 1
for k in range(ans2):
if s2[k] == '1' :
w2 += 1
while ans1 > ans2 :
s2 ='0' + s2
ans2 += 1
if ans1 == ans2 :
for l in range(ans1):
if s1[l] != s2[l]:
d += 1
while ans2 > ans1 :
s1 ='0' + s1
ans1 += 1
if ans1 == ans2:
for m in range(ans1):
if s1[m] != s2[m]:
d += 1
print(w1,w2,d, sep=" ")