Algorithm/개념 정리

기수 변환하기

기수 변환하기

 

정수값을 특정 기수(基數)로 변환하는 알고리즘

10진수 정수를 n진수 정수로 변환하려면 정수를 n으로 나눈 나머지를 구하고, 그 몫을 n으로 나누는 과정을 반복

이 과정이 몫이 0이 될 때까지 반복하고, 이런 과정을 통해 구한 나머지를 거꾸로 나열한 숫자가 기수로 변환한 숫자이다.

 

// 입력받은 10진수를 2진수 ~ 36진수로 기수 변환하여 출력

import java.util.Scanner;

class CardConv {
    //--- 정숫값 x를 r진수로 변환하여 배열 d에 아랫자리부터 넣어 두고 자릿수를 반환 ---//
    static int cardConv(int x, int r, char[] d) {
        int digits = 0;                        // 변환 뒤 자릿수
        String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

        do {
            d[digits++] = dchar.charAt(x % r);    // r로 나눈 나머지를 저장
            x /= r;
        } while (x != 0);

        for (int i = 0; i < digits / 2; i++) {    // 배열 d의 숫자 문자열을 역순 정렬
            char t = d[i];
            d[i] = d[digits - i - 1];
            d[digits - i - 1] = t;
        }

        return digits;
    }

    public static void main(String[] args) {
        Scanner stdIn = new Scanner(System.in);
        int no;                       // 변환할 정수
        int cd;                       // 기수
        int dno;                      // 변환 뒤 자릿수
        int retry;                    // 다시 한 번?
        char[] cno = new char[32];    // 변환 후 각 자리의 숫자를 넣어 두는 문자 배열

        System.out.println("10진수를 기수 변환합니다.");
        do {
            do {
                System.out.print("변환하는 음이 아닌 정수: ");
                no = stdIn.nextInt();
            } while (no < 0);

            do {
                System.out.print("어떤 진수로 변환할까요?(2-36): ");
                cd = stdIn.nextInt();
            } while (cd < 2 || cd > 36);

            dno = cardConv(no, cd, cno);            // no를 cd 진수로 변환

            System.out.print(cd + "진수로 ");
            for (int i = 0; i < dno; i++)            // 순서대로 표시
                System.out.print(cno[i]);
            System.out.println("입니다.");

            System.out.print("다시 한 번 할까요? (1…예/0…아니오): ");
            retry = stdIn.nextInt();
        } while (retry == 1);
    }
}

'Algorithm > 개념 정리' 카테고리의 다른 글

배열 복제하기  (0) 2022.11.11
소수 나열하기  (0) 2022.11.11
배열 요소 정렬  (0) 2022.11.09
배열의 요솟값 결정하기  (0) 2022.11.09
논리 연산과 드모르간 법칙  (0) 2022.11.08