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

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

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

예)

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

17개의 풀이가 있습니다. 1 / 2 Page

자바로 간단히 풀어보았습니다

package java_test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


/*
 * 자바에서 제공되는 메서드가 아닌 사용자 정의 진법 변환 메서드를 만드는 예제입니다.10진수를 입력 받아 2진수, 8진수 16진수로 반환하는 프로그램 입니다.
 */
public class test_2 {
    public static void main(String[] args) throws IOException{

        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("구할 숫자를 입력하세요");
        String value = in.readLine();

        for(int i=2; i<=16; i++){
            String strNum = toDeposition(Integer.parseInt(value), i);
            System.out.println(value + "의 "+i+" 진법: "+ strNum + "<br>");
        }

    }       


    public static String toDeposition(int value, int i){

        String returnString = "";
        String temp = "";


        while(value != 0){

            // 나머지가 0~9 사이이면  캐릭터 값을 배열에 저장
            if( (value % i) < 10 ) {
                //문자열 우->좌로 배열
                returnString = (value % i) + returnString;
                //몫을 구함
                value /= i;
            }
            // 나머지가 10 이상이면 해당하는 값의 알파벳을 저장
            else {
                int temp1 = (char)((value % i)  + 55);

                returnString = Integer.toString(temp1) + returnString;
            }

        }

        return returnString;

    }

}

결과]]] 구할 숫자를 입력하세요 233 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 SimpleDecimalConversion {
    private String result = "";
    private String[] tmp = {"A","B","C","D","E","F"};

    public static void main(String[] args) {
        SimpleDecimalConversion sdc = new SimpleDecimalConversion();
        sdc.getRemainder(233, 2);
        sdc.getRemainder(233, 8);
        sdc.getRemainder(233, 16);
    }

    public void getRemainder(int t, int v) {
        if (t == 0 || v == 0) {
            return;
        }
        int mod = (t % v);

        if (mod >= 10) {

            result = tmp[mod%10] + result;
        } else {
            result = mod + result;
        }

        int tv =  t/v;

        if (tv >= v) {
            getRemainder(tv,v);
        } else {

            if (tv >= 10) {
                System.out.println(tmp[tv%10]+result);
            } else {
                System.out.println(tv+result);
            }

            result = "";
        }
    }


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

자바입니다~ LinkedList를 스택으로 사용했습니다.

package my_test;

import java.util.LinkedList;


public class T {
    public static void main(String[] args) {
        System.out.println(change(233,2));
        System.out.println(change(233,8));
        System.out.println(change(233,16));
    }

    /**
     * 진수 변환
     * @param num 해당 10진수
     * @param su 진수
     * @return 변환값
     */
    public static String change(int num,int su){
        LinkedList stack= new LinkedList();//스택으로 사용
        String result="";
        char c;
        int n=num;

        while(n>0){
            if(n%su>9){//나머지가 10 이상일때(즉 11진수 이상일때) 문자열 배당
                stack.add((char)(n%su+55));
            }else{// 그외는 나머지 숫자값 넣기
                stack.add(n%su);
            }
            n=n/su;
        }

        //스택에서 값 추출
        while(!stack.isEmpty()){
            result+=stack.pollLast();
        }

        if(result.equals("")) result="0";//입력수가 0일때는 결과값 0 배당
        result=+num+"--->"+result;

        return result;
    }


}

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

public class DecimalConverterMain {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(convertDecimal(233, 2));
        System.out.println(convertDecimal(233, 8));
        System.out.println(convertDecimal(233, 16));
    }

    private static String convertDecimal(long from, long solution) {
        // TODO Auto-generated method stub
        String result = "";

//        System.out.println(from + "," + solution);
        if (from >= solution) {
            long remain = from % solution;
//            System.out.println(from + "%" + solution + ":" + remain);
            result = String.valueOf(remain);            
//            System.out.println("result : " + result);
            return convertDecimal(from / solution, solution) + result; 
        }
        else {
            if (solution <= 10) {
                result = result + String.valueOf(from);
            }
            else {
                switch ((int)from) {
                    case 10:    result = result + "A";  break;
                    case 11:    result = result + "B";  break;
                    case 12:    result = result + "C";  break;
                    case 13:    result = result + "D";  break;
                    case 14:    result = result + "E";  break;
                    case 15:    result = result + "F";  break;
                }
            }
        }

        return result;
    }        

}

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
package which_system;
import java.util.Scanner;
public class Secret {

    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        System.out.println("Input number in decimal system :"); //수를 10진법으로 입력하세요
        int input=in.nextInt();
        System.out.println("Into which number system? :"); //몇진법으로 나타낼 건가요?
        int system=in.nextInt();
        int cipher=1, a,i;
        for(a=system; input>=a; a*=system, cipher++); //자릿수 계산. cipher=자릿수
        int[] result=new int[cipher]; //결과값 배열로 만들기
        //System.out.println("cipher: "+cipher); //자릿수 출력시
        for(i=0; input>=0 && cipher>i; i++){ //진법에 맞는 결과값 계산
            result[i]=(input%system);
            input/=system;
        }
        System.out.println("Result in "+system+" system :"); //진법에 맞는 결과값은
        for(i=cipher-1; i>=0; i--){
            if(result[i]<10){
              System.out.print(result[i]); //결과값 나타내기
            }
            else System.out.print((char)(result[i]+55)); //10이상일 경우 알파벳으로 변환
        }
    }
}

※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.
    static void exce68()
    {
        Scanner scan = new Scanner(System.in);
        int dec = scan.nextInt(), n = scan.nextInt();
        int test = dec, cnt = 0;
        String sample = "0123456789ABCDEF";
        char[] output;

        while (test > 0)
        {
            cnt++;
            test /= n;
        }

        output = new char[cnt];

        while (dec > 0)
        {
            output[(cnt--) - 1] = sample.charAt(dec % n);
            dec /= n;
        }

        for(int i=0;i<output.length;i++)
            System.out.printf("%c",output[i]);

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

자바로 진법사 숫자를 입력받아서 나오게 만들어 보았습니다

import java.util.Scanner;

public class test21 {
    static String[] arr = new String[10];
    static String[] arr1 = {"A","B","C","D","E","F"};
    static int mok=0, nmg=0;
    static int i=0;
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int a = scan.nextInt();
        int b = scan.nextInt();

        jin(a,b); //2,233
        for(int j=i-1; j>=0; j--){ //i=8
            System.out.print(""+arr[j]);
        }


    }
    public static void jin(int jinsu, int num){
        while(num>0){
            nmg = num%jinsu; //2
            num = num/jinsu;
            if(nmg>=10){
                arr[i] = arr1[nmg%10];
            }
            else arr[i] = Integer.toString(nmg);
            i++;
        }
    }


}

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

자바로 풀어보았습니다 ...

import java.util.Scanner;

public class _10진수를n진수로변환하기 {

    public static char[] table = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                                  'A', 'B', 'C', 'D', 'E', 'F'};

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        int value = scan.nextInt();
        int n = scan.nextInt();

        if(!(n >=2 && n <= 16)){
            System.err.println("올바른 n값을 입력하세요.");
            System.exit(0);
        }

        StringBuffer sb = new StringBuffer();

        while(value > 0) {
            sb.insert(0, table[value%n]);
            value /= n;
        }

        System.out.println(sb);
    }
}

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

자바 로 코딩

    public static void main(String[] args){

        try{
            int jinsu = 0;
            int number = 0;

            String resultNumber = "";

            Scanner sc = new Scanner(System.in);

            System.out.print("진수 선택  :: ==> ");
            jinsu = sc.nextInt();
            System.out.print("숫자 입력 :: ==> ");
            number = sc.nextInt();

            do{
                if( jinsu == 16 ){
                    switch ( number%jinsu ) {
                    case 10 :
                        resultNumber += "A";
                        break;
                    case 11 :
                        resultNumber += "B";
                        break;
                    case 12 :
                        resultNumber += "C";
                        break;
                    case 13 :
                        resultNumber += "D";
                        break;
                    case 14 :
                        resultNumber += "E";
                        break;
                    case 15 :
                        resultNumber += "F";
                        break;
                    default:
                        resultNumber += String.valueOf( (number%jinsu) );
                        break;
                    }

                    number = (number/jinsu);

                }else{
                    resultNumber += String.valueOf( (number%jinsu) );
                    number = (number/jinsu);

                }
            }while( number > 0 );

            System.out.println("resultNumber :: ==> " + resultNumber );

            System.out.println("resultNumber reverse:: ==> " + new StringBuffer(resultNumber).reverse() );

        }catch(Exception e){
            e.printStackTrace();
        }
    }
※ 상대에게 상처를 주기보다 서로에게 도움이 될 수 있는 댓글을 달아 주세요.

자바로 코딩

  1. 나누는 수는 나머지 보다 항상 큼
  2. char 배열을 16 까지 선언
  3. table[number%jinsu] 여기가 핵심.
    public static void main(String[] args){

        char[] table = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

        try{
            int jinsu = 0;
            int number = 0;

            String resultNumber = "";

            Scanner sc = new Scanner(System.in);

            System.out.print("진수 선택  :: ==> ");
            jinsu = sc.nextInt();
            System.out.print("숫자 입력 :: ==> ");
            number = sc.nextInt();

            while( number > 0 ){
                System.out.println("table :: ==> " + number%jinsu );

                System.out.println( table[number%jinsu]  );
                number /= jinsu;
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
    }

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

풀이 작성

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

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

stack x 2
연관 문제

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