10진수를 n진수로 변환하기

다음은 233 이란 10진수를 2진수로 변환하는 과정을 나타낸 그림이다.

위 그림을 참조하여 라이브러리를 사용하지 말고 10진수를 n진수로 변환하는 프로그램을 작성하시오.. (단, n의 범위는 2 <= n <= 16)

예)

  • 2진수로 변환 : 23310 --> 111010012
  • 8진수로 변환 : 23310 --> 3518
  • 16진수로 변환 : 23310 --> E916
stack
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

60개의 풀이가 있습니다. 1 / 6 Page

재귀로 풀어 보았습니다.

def convert(n, base):
    T = "0123456789ABCDEF"
    q, r = divmod(n, base)
    if q == 0:
        return T[r]
    else:
        return convert(q, base) + T[r]


print convert(233, 2)
print convert(233, 8)
print convert(233, 16)

2014/09/19 09:36

길가의풀

깔끔하네요. 재귀를 이렇게 활용이 되는 군요. - Shin gil sang, 2015/11/17 16:11 M D
저도 재귀로 풀었지만, 훨씬 더 깔끔하네요. 함수에 문자를 더하고 리턴하는법 배우고 갑니다^^ - 디디, 2016/03/21 23:38 M D
divmod 펑션과 리턴하는법 배우고갑니다 ^^ - Kim Soojong, 2016/12/05 09:15 M D
divmod 라는 좋은 built-in function 과 재구함수호출 그리고 재귀함수 return 할때 문자를 더해서 리턴 할 수도 있다는 것, 10 이상의 수를 list indexing 으로 하면 깔끔하다는 것을 배우고 갑니다. 고맙습니다. - 예강효빠, 2017/04/18 04:38 M D
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def toN(n, num=2):
    res=[]
    res2=''
    while n>0:
       n, tmp = divmod(n, num)
       res.append((str(tmp) if tmp <10 else 'ABCDEF'[tmp-10]))

    for i in range(len(res)):
        res2 += res.pop()

    return res2

print(toN(233, 2))
print(toN(233, 8))
print(toN(233, 16))
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬으로 풀어봤습니다.

# num -> 바꿀 숫자, t -> 진수 타입(2, 8, 16 등)
def transNum(num, t):

    tNum = ''

    # 정수형태의 최소값이 나올 때까지 진행
    while 1 <= num:
        modNum = num % t

        if 9 < modNum:  # 나머지가 9자리를 초과할 경우 캐릭터형태로 변환
            tNum = str(unichr(ord('a') + modNum - 10)) + tNum
        else:
            tNum = str(modNum) + tNum
        num = num / t

    return tNum
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def baseN(num,b,numerals="0123456789abcdefghijklmnopqrstuvwxyz"):
    return ((num == 0) and numerals[0]) or (baseN(num // b, b, numerals).lstrip(numerals[0]) + numerals[num % b])
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#coding: CP949
k=int(input('변환하려는 수를 입력하여라:'))
n=int(input('몇진수로 표현하려는가(1이상 16이하)?:'))
table={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,
10:'A', 11:'B',12:'C',13:'D',14:'E',15:'F'} # n이 11~16일 경우 table 사용.
data=[]
if n <=10:
    while k !=0:
        p=divmod(k,n)[1]
        data.append(p)
        k=divmod(k,n)[0]
    data.reverse()
    result=""
    for i in data:
        result+=str(i)
    print(result)
elif n>10 and n<=16:
    while k != 0:
        p=divmod(k,n)[1]
        data.append(table[p])
        k=divmod(k,n)[0]
    data.reverse()
    result=""
    for i in data:
        result+=str(i)
    print(result)
else:
    print('잘못된 입력입니다.')

파이썬 3.4
저처럼 for i in range(0, len(data))를 를 하는 대신 for i in data를 쓰면 간결하군요. divmod함수도 배워갑니다. - 최승호, 2016/07/14 18:44 M D
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
n=233
j=16

o=''
while n:
    n,m=divmod(n,j)
    o=(str(m) if m<10 else 'ABCDEF'[m-10])+o
print(o)
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬 3.4 입니다.

def num_conv(num, sys):
    result = ''
    rem_str_list = ['A','B','C','D','E','F','G']
    while num > 0:
        num, rem = divmod(num, sys)
        if rem < 10:
            rem_str = str(rem)
        else:
            rem_adj = rem - 10
            rem_str = rem_str_list[rem_adj]
        result = rem_str + result
    print(result)
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬입니다.

def n(m, n):
    numb = ""
    x = m
    while x > 0:
        numb = "%s" % (x%n) + numb
        x = x//n
    else:
        print numb
+1 E9(16)가 149로 나오는 문제가 있어요. 그런데 코드가 무지 짧고 간결하네요. - 최승호, 2016/07/14 18:40 M D
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
stack = []
hoho = "ABCDEF"
ans = ""

def transformer(m,n):
    global stack
    global hoho
    global ans
    if m%n == 0:
        stack.append(0)
    else:
        if m%n < 10:
            stack.append(m%n)
        else:
            stack.append(hoho[(m%n)-10])

    if m/n >= n:
        transformer(m/n,n)
    else:
        if m/n <= 10:
            stack.append(m/n)
        else:
            stack.append(hoho[(m/n)-10])
        for i in range(len(stack)-1,-1,-1):
            ans += str(stack[i])

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬으로 풀어보았습니다.

def convert(num, base=2):
    assert base > 1 and base < 17
    digits = "0123456789ABCDEF"
    s = []
    while num > 0:
        s.append(digits[num % base])
        num = num // base
    return "".join(s[::-1]) + "(%d)"%base

print convert(254, 16)

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

풀이 작성

※ 풀이작성 안내
  • 본문에 코드를 삽입할 경우 에디터 우측 상단의 "코드삽입" 버튼을 이용 해 주세요.
  • 마크다운 문법으로 본문을 작성 해 주세요.
  • 풀이를 읽는 사람들을 위하여 풀이에 대한 설명도 부탁드려요. (아이디어나 사용한 알고리즘 또는 참고한 자료등)
  • 작성한 풀이는 다른 사람(빨간띠 이상)에 의해서 내용이 개선될 수 있습니다.
목록으로
코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.

stack x 2
연관 문제

언어별 풀이 현황
전 체 x 125
python x 60
cs x 4
java x 25
cpp x 15
objectivec x 1
기 타 x 12
scala x 2
perl x 1
javascript x 4
ruby x 1