기수 변환하기
정수값을 특정 기수(基數)로 변환하는 알고리즘
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 |