알고리즘, 자료구조

지수 변환기 -2

Adose 2024. 3. 7. 13:37
package algorithm;

import java.util.Scanner;

public class ExponentialConverter_2 {
    //x 정숫값, r 진수, d에 아랫자리 부터 넣어두고 자릿수를 반환
    static int cardConv(int x, int r, char[] d) {
        int digits = 0;

        //배열에 0부터 16진수를 위한 문자를 넣어두었다.
        String dchar = "0123456789ABCDEFGHIJKLMNOPZRSTUVWXYZ";


        //아래 부분이 반복되면, 배열에는 정수를 진수로 나눈 나머지가 들어가서 결론적으로 변환된 값이 배열에 하나씩 들어간다.
        do {
            //정숫값을 입력된 진수(2~36진수)로 바꾸기 위하여 나눈 값의 나머지를 배열에 저장한다.
            d[digits++] = dchar.charAt(x % r);

            //x에 진수로 나눈 값을 넣어준다.
            x /= r;
        } while (x != 0);//x가 0이 아닐때까지만 돌아간다.

        for (int i = 0; i < digits / 2; i++) {
            char t = d[i];
            d[i] = d[digits - i - 1];
            d[digits - i - 1] = t;
        }

        return digits;
    }

    public static void main(String[] args) {
        Scanner scan = 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.println("변환하는 음이 아는 정수:");
                no = scan.nextInt();
            } while (no < 0);

            do {
                System.out.println("어떤 진수로 변환할까요?(2~36)");
                cd = scan.nextInt();
            } while (cd < 2 || cd > 36);
            //cd가 2보다 작으면 true -> 반복
            //cd가 36보다 크면 true -> 반복
            //둘다 틀린다면 false이기 때문에 반복문 탈출

            dno = cardConv(no, cd, cno);

            System.out.print(cd + "진수로");
            for (int i = 0; i < dno; i++) {
                System.out.print(cno[i]);
            }
            System.out.println("입니다.");

            System.out.println("한번 더 할까요 ? (1 : 예, 0 : 아니요)");
            retry = scan.nextInt();
        } while (retry == 1);

        System.out.println("지수 변환이 끝났습니다. ");

    }
}

'알고리즘, 자료구조' 카테고리의 다른 글

시간복잡도  (0) 2024.03.14
이진검색  (1) 2024.03.08
지수 변환기 -1  (0) 2024.03.07