자료구조

10진수 > 2진수~36진수 기수변환 [java]

땅콩콩 2022. 7. 14. 21:09

원하는 10진수를 2진수~36진수중 원하는 기수로 변환해주는 코드이다.

 

package com.company;

import java.util.*;

public class Main {
    //정수값 x를 r진수로 변환하여 배열 d에 아랫자리부터 넣어두고 자릿수를 반환.
    static int cardConvR(int x, int r, char[] d){
        int digits = 0; //변환후의 자릿수
        String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        do{
            d[digits++] = dchar.charAt(x%r); //x를 r로 나눈 나머지를 저장
            x/=r;
        }while (x != 0);
        return digits;
    }
    public static void main(String[] args) {
        Scanner scanner = 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 = scanner.nextInt();
            }while (no<0);

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

            dno = cardConvR(no, cd, cno); //no를 cd기수로 변환하고, 변환된 수의 자릿수를 dno에 담는다.

            System.out.println(cd+"진수로는 ");
            for (int i = dno-1; i >= 0; i--) { //변환된 수가 cno에 거꾸로 담겨있기때문에 이걸 반대로 출력해준다.
                System.out.print(cno[i]);
            }
            System.out.println("입니다.");

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

출처: doit자료구조 알고리즘 입문

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

스택(Stack)  (0) 2022.07.16
배열검색 (이진검색)  (0) 2022.07.15
배열 검색 (선형검색, 보초법)  (0) 2022.07.15
한 해의 경과일수 구하기 [java]  (0) 2022.07.14
소수의 나열 [java]  (0) 2022.07.14