반응형
10진수 정수를 n진수 정수로 변환하려면 정수를 n 으로 나눈 나머지를 구하고, 그 몫에 대해 나눗셈을 반복해야 한다.
코드 설명)
charAt메서드는 문자열에서 임의의 문자를 액세스 하기 위한 String 클래스의 메서드
1. x%n을 인덱스로 하는 문자를꺼내 배열에 순서대로 저장
2. 나눗셈을 반복
3. 저장한 배열을 다시 역순으로 정렬
package chap02;
import java.util.Scanner;
// 입력 받은 10진수를 2진수 ~36진수로 기수변환하여 나타냄(윗자리부터 배열에 저장)
class CardConv_02_06 {
// 정수 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[0]~d[digits-1]
char temp = d[i];
d[i] = d[digits - i - 1];
d[digits - i - 1] = temp;
}
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' 카테고리의 다른 글
[java][algorithm]검색 - 선형검색, 이진검색(binarySearch) (0) | 2018.10.28 |
---|---|
[java][algorithm]소수 구하기 (0) | 2018.10.07 |
[java][algorithm] 배열 역순으로 정렬하기, 배열 뒤집기 (0) | 2018.10.07 |
[java][algorithm] 배열의 최댓값 구하기 (0) | 2018.10.07 |
[java] 반복 - 피라미드 만들기 (★) (0) | 2018.10.07 |