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

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

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

예)

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

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

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;
}

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

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
#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

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

풀이 작성

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

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

stack x 2
연관 문제

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