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

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

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

예)

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

97개의 풀이가 있습니다. 1 / 10 Page

n = input("10진수 >> ")
length = len(n)
result = 0
a = 1

while a <= length:
    place_value = 1
    index = length - a
    while index > 0:
        place_value = place_value * 2
        index = index - 1
    result = result + n[a] * place value
    a = a + 1
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
# python 3.5.2 with PyCharm Community Edition 2017.1.1

import math

def njinsoo(num, base):
    result = []
    num_expression = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"]

    for i in range(0, int(math.log(num, base)) + 1):
        if i == 0:
            result = num_expression[num % base]
        else:
            result = num_expression[num % base] + result
        num = num // base
    return result

print(njinsoo(233,2))
print(njinsoo(233,8))
print(njinsoo(233,16))
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def n(number,div):
    result=[number]
    result1=[]
    six={10:'A',11:'B',12:'C',13:'D',14:'E',15:'F'}
    if div==2:
        while number>1:
            number=number//div
            result.append(number)
        for i in result:
            num=i%2
            result1.append(num)
    if div==8:
        while number>1:
            number=number//div
            result.append(number)
        for i in result:
            num=i%8
            result1.append(num)
    if div==16:
        while number>1:
            number=number//div
            result.append(number)
        for i in result:
            num=i%16
            if num in six:
                num=six[num]
            result1.append(num)

    result1.reverse()
    for k in result1:
        kk=print(k, end='')
    return kk

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

Pythone 3.4.2 함수 작성

def conv_digit(dividend, digit):
    result = []
    quotient = dividend // digit
    remainder = dividend % digit
    remainder_str = str(remainder)
    if remainder > 9:
        if remainder == 10: remainder_str = "A"
        if remainder == 11: remainder_str = "B"
        if remainder == 12: remainder_str = "C"
        if remainder == 13: remainder_str = "D"
        if remainder == 14: remainder_str = "E"
        if remainder == 15: remainder_str = "F"
    result.append(remainder_str)
    while quotient != 0:
        remainder = quotient % digit
        remainder_str = str(remainder)
        if remainder > 9:
            if remainder == 10: remainder_str = "A"
            if remainder == 11: remainder_str = "B"
            if remainder == 12: remainder_str = "C"
            if remainder == 13: remainder_str = "D"
            if remainder == 14: remainder_str = "E"
            if remainder == 15: remainder_str = "F"
        result.append(remainder_str)
        quotient = quotient // digit

    result.reverse()
    result_digit_number = "".join(result)

    return result_digit_number
'길가의 풀'님의 풀이임. divmod(), 재귀함수호출, 재귀함수호출과 문자리턴을 동시에, 10 이상은 list indexing 으로..정말 깔끔 def convert(n, base): T = "0123456789ABCDEF" q, r = divmod(n, base) if q == 0: return T[r] else: return convert(q, base) + T[r] - 예강효빠, 2017/04/18 04:41 M D
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int main()
{
    string result;
    int num, to, remainder;
    cin >> num;
    cin >> to;
    while (num > 0) {
        remainder = num % to;
        num /= to;
        result.append(to_string(remainder));
    }
    reverse(result.begin(), result.end());
    cout << result << endl;
    return 0;
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬 3.5

# decimal => n 

Number = int(input("Input a natural number: "))
n = int(input("10 => n (note that 2 <= n <= 16): "))

temp = Number
result = ""
while temp != 0: 
    rem = temp%n # 나머지를 구한다. 
    if rem == 10: # 11진수~16진수를 위해서. 
        rem = 'A'
    elif rem == 11:
        rem = 'B'
    elif rem == 12:
        rem = 'C'
    elif rem == 13:
        rem = 'D'
    elif rem == 14:
        rem = 'E'
    elif rem == 15:
        rem = 'F'

    result = str(rem) + result 
    temp = temp//n # 몫을 구한다. 


print("%d(10) => %s(%d)" %(Number, result, n))
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#8.py
#10진수를 n진수로 변환하기

def trans(number,base):
    result = ''
    num_lst = '0123456789ABCDEF'
    while True:
        result = str(num_lst[number%base])+result
        if int(number/base) == 0: return result
        else: number = int(number/base)

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

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

import java.util.Scanner;

/*
 * 위 그림을 참조하여 라이브러리를 사용하지 말고 10진수를 n진수로 변환하는 프로그램을 작성하시오.. (단, n의 범위는 2 <= n <= 16)
 * 예)
 * 
 * 233의 2 진법: 11101001
 * 233의 3 진법: 22122
 * 233의 4 진법: 3221
 * 233의 5 진법: 1413
 * 233의 6 진법: 1025
 * 233의 7 진법: 452
 * 233의 8 진법: 351
 * 233의 9 진법: 278
 * 233의 10 진법: 233
 * 233의 11 진법: 1A2
 * 233의 12 진법: 175
 * 233의 13 진법: 14C
 * 233의 14 진법: 129
 * 233의 15 진법: 108
 * 233의 16 진법: E9
 */
public class ConvNum {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Please insert JINSU? ");

        int iNum = 233;
        int iJinsu = sc.nextInt();
        int iTmp = iNum;

        String sb = "";

        while(1==1){
            if(iJinsu < 10){
                sb = String.valueOf(iTmp % iJinsu) + sb;
            } else if(iJinsu >= 10){
                sb =(char)((iTmp % iJinsu)  + 55) + sb;
            }
            iTmp = iTmp / iJinsu;

            if(iTmp == 0){
                break;
            }
        }
        System.out.println(sb);
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

스택을 이용해서 풀어봤습니다


#include <cstdio>
#include <stack>
using namespace std;

int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int N,M;
        stack<int> s;
        scanf("%d%d",&N,&M);
        while(N!=0){
            s.push(N%M);
            N/=M;
        }
        while(!s.empty()){
            if(M > 10 && s.top() >= 10) printf("%c",s.top()+55);
            else printf("%d",s.top());
            s.pop();
        }
        printf("\n");
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

//8진수 까지만

include

include

using namespace std;

int main() { int n = 0; int count = 0; cout << "n을 입력하세요 "; cin >> n; int n2 = n;

//2진수
int arr[100];

for(;;)
{
    arr[count] = n % 2;
    n = n / 2;
    count++;
    if (n == 1)
    {
        arr[count] = n;
        break;
    }
}
int j = 0;
cout << "2진수 : ";
for (count ; count >= j;count--)
{
    cout << arr[count] ;
}
cout << endl;

//8진수
if (n >= 8)
{

    count = 0;
    int arr2[100];

    for (;;)
    {
        arr2[count] = n2 % 8;
        n2 = n2 / 8;
        count++;
        if (1 <= n2 && n2<8)
        {
            arr2[count] = n2;
            break;
        }
    }

    j = 0;
    cout << "8진수 : ";
    for (count; count >= j; count--)
    {
        cout << arr2[count];
    }
}



return 0;

}

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

풀이 작성

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

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

stack x 2
연관 문제

언어별 풀이 현황
전 체 x 97
python x 46
cpp x 14
java x 18
기 타 x 8
cs x 4
javascript x 2
ruby x 1
scala x 2
perl x 1
objectivec x 1