python에서는 기본적으로 int() 라는 함수를 지원한다
int(string, base)
print(int('101',2))
print(int('202',3))
print(int('303',4))
print(int('404',5))
print(int('505',6))
print(int('ACF',16))
20
51
104
185
2767
10진수로 변경이 가능하다.
2, 8, 16진수는 bin(), oct(), hex() 함수를 지원한다.
print(bin(11))
print(oct(11))
print(hex(11))
0b1011
0o13
0xb
0b는 2진수, 0o는 8진수, 0x는 16진수를 의미합니다. 진법 표시를 지울려면 [2:]를 하면 된다.
print(bin(11)[2:])
print(oct(11)[2:])
print(hex(11)[2:])
1011
13
b
int 같은 함수가 없기 때문에 코드작성이 필요하다
def solution(n, q):
rev_base = ''
while n > 0:
n, mod = divmod(n, q)
rev_base += str(mod)
return rev_base[::-1]
# 역순인 진수를 뒤집어 줘야 원래 변환 하고자하는 base가 출력
print(solution(45, 3))
1200
위에 썻던것들을 활용해서 n진수를 10진수로 변경하고 다시 n진수로 변경하면 됩니다.
print(solution(int('c',16),4)) # 16진수인 C를 4진수로 바꾸는것
print(solution(int('4',6),3)) # 6진수인 4를 3진수로 바꾸는것
print(solution(int('21',3),7)) # 3진수인 21을 7진수로 바꾸는것
print(solution(int('15',9),5)) # 9진수인 15를 5진수로 바꾸는것
30
11
10
24
def solution(n):
rev_thr = []
for i in range(1, 100):
if (3 ** i) < n:
a = (n // (3 ** (i-1)))
thr = a % 3
rev_thr.append(thr)
if a < 9:
rev_thr.append(a // (3))
print(rev_thr)
tenth = 0
z = 1
for j in rev_thr:
number = ((3 ** (len(rev_thr)-z) * j))
z += 1
tenth += number
print(tenth)
solution(45) # result 7 ,rev_thr = [0,0,2,1]
solution(125) # result 229, rev_thr = [2,2,1,1,1]
감사합니다~~