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

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

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

예)

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

78개의 풀이가 있습니다. 8 / 8 Page

def change_number(num,step=2):
    dict_ = {10:'A',11:'B',12:'C',13:'D',14:'E',15:'F'}
    tmp_list = list()
    while num >= 1:
        if num % step < 10:
            tmp_list.append(num % step)
        else:
            tmp_list.append(dict_[(num % step)])
        num = num//step
    tmp_list.reverse()
    for x in tmp_list:
        print(x,end='')
    print('  ',step,'진수')

change_number(233)
change_number(233,8)
change_number(233,16)

#### 2016.12.10 D-439 ####
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
class Division {
    private int quotient;
    private int remainder;

    public Division(int quotient) {
        this.quotient = quotient;
    }

    public int getQuotient() {
        return quotient;
    }

    public int getRemainder() {
        return remainder;
    }

    public void runDiv(int num, int divisor) {
        this.quotient = num / divisor;
        this.remainder = num % divisor;
    }
}
public class NodalNumber {
    public void printTransferNodalNumber(int num, int nodal) {
        System.out.println(
            nodal < 10 ? this.LessThanDecimal(num, nodal) : this.MoreThenDecimal(num, nodal)
        );
    }

    public String LessThanDecimal(int num, int nodal) {
        System.out.println("LessThanDecimal");

        Division div = new Division(num);
        StringBuffer resultNumber = new StringBuffer();
        while(div.getQuotient() > nodal) {
            div.runDiv(num, nodal);
            resultNumber.append(div.getRemainder());
            num = div.getQuotient();
        }
        resultNumber.append(div.getQuotient());
        resultNumber.reverse().append("(").append(nodal).append(")");
        return resultNumber.toString();
    }

    public String MoreThenDecimal(int num, int nodal) {
        System.out.println("MoreThenDecimal");
        Division div = new Division(num);
        StringBuffer resultNumber = new StringBuffer();
        String[] arr = {"A","B","C","D","E","F","G"};
        while(div.getQuotient() > nodal) {
            div.runDiv(num, nodal);
            int remainder = div.getRemainder();
            resultNumber.append(remainder < 10 ? remainder : arr[remainder % 10]);
            num = div.getQuotient();
        }
        int quotient = div.getQuotient();
        resultNumber.append(quotient < 10 ? quotient : arr[quotient % 10]);
        resultNumber.reverse().append("(").append(nodal).append(")");
        return resultNumber.toString();
    }

    public static void main(String[] args) {
        new NodalNumber().printTransferNodalNumber(233, 16);
    }
}

자바입니다.

num = 233

결과 : E9(16) 351(8) 11101001(2)

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

C(11) gcc -std=c11

#include <stdio.h>
#include <assert.h>

// n을 k진수로 변환, k범위[2, 16]
void convt(int n, int k);

int main(void)
{
    int n, k;

    while (scanf("%d %d", &n, &k) == 2)
    {
        assert(2 <= k && k <= 16);
        convt(n, k);
        putchar('\n');
    }

    return 0;
}

void convt(int n, int k)
{
    static const char *code = "0123456789ABCDEF";

    if (n / k == 0) ;
    else convt(n / k, k);

    putchar(code[n % k]);
}
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
public class test {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.println("변경하고 싶은 값과 변경하고 싶은 진수를 차례로 입력");
        int number = scan.nextInt();
        int jinsu = scan.nextInt();

        System.out.println(changeJinsu(number,jinsu));
    } // main end

    public static String changeJinsu(int number, int jinsu) {
        String strNumber = "";

        while( (number+jinsu) > jinsu) {                    // 값보다 진수가 더 작을때 + 1번더

            if(number % jinsu > 9) {                        // 나머지가 10 이상일 경우
                char test = (char)(number % jinsu + 55);    // char(문자)로 대체 (65부터 대문자 A)
                strNumber = test + strNumber;

            } else {
                strNumber = (number % jinsu) + strNumber;   // 10 미만일 경우 그대로 진행
            }

            number /= jinsu;
        }

        return strNumber;
    } // changeJinsu end
} // test end
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include<stdio.h>
#include<windows.h>
#define MAX 10
int main()
{
    int a,i,b=233,count=0,c[MAX];

    printf("몇진수로 구하겠습니까?\n");
    scanf("%d",&a);
    while(1)
    {
        c[count]=b%a;
        b=(int)b/a;
        if(b==0) break;
        count++;
            }
    for(i=0;i<=count;i++)
        printf("%d",c[count-i]);
    system("pause");
    return 0;
}

2016/12/28 00:21

oh

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#include<stdio.h>
#include<windows.h>
#define MAX 10
int main()
{
    int a,i,b=233,count=0,c[MAX];

    printf("몇진수로 구하겠습니까?\n");
    scanf("%d",&a);
    while(1)
    {
        c[count]=b%a;
        b=(int)b/a;
        if(b==0) break;
        count++;
            }
    for(i=0;i<=count;i++)
        printf("%d",c[count-i]);
    system("pause");
    return 0;
}

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
number=int(input('0<=숫자:')); system=int(input('2<=진법<=16:'))
result=[]; char="0123456789ABCDEF"
while 1==1:
    result.insert(0,char[number%system])
    if number<system: break
    number//=system
print("".join(result))
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
// 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 78
java x 15
scala x 2
python x 36
javascript x 2
perl x 1
cpp x 11
기 타 x 6
cs x 3
objectivec x 1
ruby x 1