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

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

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

예)

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

87개의 풀이가 있습니다. 1 / 9 Page





class Program
    {
        private static List<string> rList = new List<string>();
        static void Main(string[] args)
        {
            int targetNum = 233;
            int quintessence = 16;
            string result = string.Empty;

            Generator(targetNum, quintessence);

            for (int i = rList.Count-1; i >= 0; i--)
            {
                result += rList[i].ToString();
            }
            Console.WriteLine(result);
            Console.ReadLine();
        }

        private static void Generator(int targetNum, int quintessence)
        {
            int q = targetNum / quintessence;
            int r = targetNum % quintessence;
            string t = "0123456789ABCDEF";

            rList.Add(t[r].ToString());
            if(q != 0)
            {
                Generator(q, quintessence);
            }
        }
    }
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

파이썬 3.5.3 연습용 코드입니다.

Rsum = ''

a = int(input("몇진수로 교환? : "))

def change2other(n):

    global a
    Qcompare = divmod(n,a)[0]
    R = str(divmod(n,a)[1])
    global Rsum

    if R == '10':
        R = 'A'
    elif R == '11':
        R = 'B'
    elif R == '12':
        R = 'C'
    elif R == '13':
        R = 'D'
    elif R == '14':
        R = 'E'
    elif R == '15':
        R = 'F'

    Rsum = R + Rsum

    if Qcompare == 0:
        print(Rsum)
        Rsum = ''

    else:
        change2other(Qcompare)        

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

math 라이브러리의 floor 모듈 사용했는데, 문제가 될 지도 모르겠네요?! 다른 분들 코드 보고 많이 배워갑니다~^__^

from math import *
n = int(input('10진수로 숫자를 입력'))
conv_n = int(input('원하는 system은? (2 <= m <= 16)'))
changed = []

while n/conv_n > 0:    
    if n%conv_n < 10:
        changed.insert(0, n%conv_n)
    elif n%conv_n == 10:
        changed.insert(0, 'A')
    elif n%conv_n == 11:
        changed.insert(0, 'B')
    elif n%conv_n == 12:
        changed.insert(0, 'C')
    elif n%conv_n == 13:
        changed.insert(0, 'D')
    elif n%conv_n == 14:
        changed.insert(0, 'E')
    elif n%conv_n == 15:
        changed.insert(0, 'F')
    n = floor(n/conv_n) 

for n in changed:
    print(n,end='')
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
  • python 3.5.2

  • 재귀함수방식으로 풀었습니다.

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))
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Ndecimal {

    static int t = 233;

    public static void main(String[] args) {
        int n = new Scanner(System.in).nextInt();
        String k[] = new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"};
        List<String> queue = new ArrayList();
        while (true) {
            int m = t / n;
            int l = t % n;
            t = m;
            queue.add(k[l]);
            if (m <= n) {
                queue.add(k[m]);
                break;
            }
        }
        Collections.reverse(queue);
        queue.stream().forEach(System.out::print);
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
/*

dev : peanutBro
date : 170218
content : 

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

예)

2진수로 변환 : 233(10) --> 11101001(2)
8진수로 변환 : 233(10) --> 351(8)
16진수로 변환 : 233(10) --> E9(16)

*/

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif

#include <iostream>
#include <string>
#include <stack>
using namespace std;

void viewTransNumber(int inputNumber, int formNumber);

int main(void)
{
    int inputNumber = -1;
    int inputFormNumber = -1;
    cout << "숫자를 입력하세요 : ";
    cin >> inputNumber;
    cout << "진법을 입력하세요 : ";
    cin >> inputFormNumber;

    viewTransNumber(inputNumber, inputFormNumber);
    return 0;
}

void viewTransNumber(int inputNumber, int formNumber)
{
    stack<int> stack;

    while (inputNumber != 0)
    {
        if (inputNumber % formNumber)
        {
            stack.push(1);
        }
        else
        {
            stack.push(0);
        }
        inputNumber /= formNumber;
    }
    while (!(stack.empty()))
    {
        cout << stack.top();
        stack.pop();
    }
    cout << endl;
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

자바 재귀함수 이용

public class Test458 {

    static StringBuffer nNumber = new StringBuffer();

    public static void main(String[] args) {
        convert(233, 16);
        System.out.println(nNumber.reverse());
    }

    private static void convert(int num, int n) {
        if (num / n == 0 && num % n == 0) {
            return;
        }

        if (num % n >= 10) {
            switch (num % n) {
                case 10: nNumber.append("A"); break;
                case 11: nNumber.append("B"); break;
                case 12: nNumber.append("C"); break;
                case 13: nNumber.append("D"); break;
                case 14: nNumber.append("E"); break;
                case 15: nNumber.append("F"); break;
            }
        } else {
            nNumber.append(num % n);
        }

        n10ton2(num / n, n);
    }
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
def number(n,p):
    alpha=['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
    result=""
    while n>0:
        result=alpha[n%p]+result
        n=n//p
    print(result)
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

Input Value : 233

Input Radix : 16

Output :

E9

계속하려면 아무 키나 누르십시오 . . .

스트링에 하나 씩 추가함으로써 역순 출력

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
    int radix = 0;
    int input = 0;
    printf("Input Value : ");
    scanf("%d", &input);
    printf("Input Radix : ");
    scanf("%d", &radix);
    int sum = 0;
    char out[10];
    int i = 0;
    while(input > 0) {
        if(radix > 9) {
            switch(input) {
                case 10: out[i]='A'; break;
                case 11: out[i]='B'; break;
                case 12: out[i]='C'; break;
                case 13: out[i]='D'; break;
                case 14: out[i]='E'; break;
                case 15: out[i]='F'; break;
                default:  out[i] = input%radix+48;      
            }
            i++;
            input = input / radix;
        }
        else {
            out[i] = input%radix+48;
            input = input / radix;
            i++;
        }
    }
    printf("Output : \n");
    for(int j=i-1; j>=0;j--)
        printf("%c", out[j]);
    printf("\n");
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
// C++ 16 진수 이상을 지원합니다.. 단 대문자 알파벳 이후는 소문자 알파벳 등 아스키 코드로 변환.. 이런 저런 에러 처리는 생략..

int main()
{
    int nValue  = 0;
    int nBit    = 0;

    cin >> nValue >> nBit;

    int anBuff[ 10000 ]  = { 0, };

    int nData   = nValue;

    int nCount  = 0;

    while( nData > 0 )
    {
        anBuff[ nCount ] = ( nData % nBit );

        nData   /= nBit;

        ++nCount;
    }

    while( nCount > 0 )
    {
        --nCount;

        if( 10 <= anBuff[ nCount ] )
        {
            cout << ( char )( 'A' + ( anBuff[ nCount ] - 10 ) );
        }
        else
        {
            cout << anBuff[ nCount ];
        }
    }

    return 0;
}

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

풀이 작성

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

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

stack x 2
연관 문제

언어별 풀이 현황
전 체 x 87
cs x 4
python x 40
java x 17
cpp x 12
기 타 x 7
javascript x 2
ruby x 1
scala x 2
perl x 1
objectivec x 1