Do it! 자료구조와 함께 배우는 알고리즘 입문[자바편] 연습문제와 실습문제입니다.
10진수를 n진수로 변환하는 방법을 모른다면 아래의 포스팅에서[10진수-n진수 변환] 부분을 읽고 오시는 것을 추천합니다.
2022.11.29 - [Math/이산수학] - 진수, 진법 변환, 보수
10진수를 2~36진수로 변환하는 알고리즘
static void cardConvR(int x, int r)
{
char []d = new char[32];
int digits = 0; //변환된 진수의 자릿수를 저장
String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
do {
d[digits++] = dchar.charAt(x % r); // r로 나눈 나머지를 저장
x /= r;
} while (x != 0);
for(int i = digits-1; i>=0; i--) System.out.print(d[i]);
}
설명
위와 같은 결과로 이루어진 배열을 역순으로 출력하면
진수변환이 되는 것이다.
문자 추출 charAt() 메소드
charAt() 메소드는 매개값으로 주어진 인덱스의 문자를 리턴한다.
dchar.charAt(x % r)에서 x는 59 r이 16이라고 가정하면 59를 16로 나눈 후 나머지는 11이다
dchar배열의 인덱스 11은 B이므로 B가 리턴된다.
실행 예제
import java.util.Scanner;
public class Main{
static void cardConvR(int x, int r)
{
char []d = new char[32];
int digits = 0; //변환된 진수의 자릿수를 저장
String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
do {
d[digits++] = dchar.charAt(x % r); // r로 나눈 나머지를 저장
x /= r;
} while (x != 0);
for(int i = digits-1; i>=0; i--) System.out.print(d[i]);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("변환할 정수 입력 : ");
int num = sc.nextInt();
System.out.print("진수 입력 : ");
int n = sc.nextInt();
cardConvR(num,n);
}
}
/*
변환할 정수 입력 : 59
진수 입력 : 2
111011
*/
자세한 계산과정을 출력하는 알고리즘
static void cardConvR(int x, int r)
{
char []d = new char[32];
int digits = 0; //변환된 진수의 자릿수를 저장
String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
System.out.printf("%2d | %6d\n",r,x);
System.out.println(" + -------");
do {
d[digits++] = dchar.charAt(x % r); // r로 나눈 나머지를 저장
if((x/r) == 0) System.out.printf(" %6d ... %2c\n", x/r, dchar.charAt(x % r));
else System.out.printf("%2d | %6d ... %2c\n", r, x/r, dchar.charAt(x % r));
x /= r;
if(x != 0) System.out.println(" + -------");
} while (x != 0);
System.out.print("변환된 값 : ");
for(int i = digits-1; i>=0; i--) System.out.print(d[i]);
}
실행예제
import java.util.Scanner;
public class Main{
static void cardConvR(int x, int r)
{
char []d = new char[32];
int digits = 0; //변환된 진수의 자릿수를 저장
String dchar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
System.out.printf("%2d | %6d\n",r,x);
System.out.println(" + -------");
do {
d[digits++] = dchar.charAt(x % r); // r로 나눈 나머지를 저장
if((x/r) == 0) System.out.printf(" %6d ... %2c\n", x/r, dchar.charAt(x % r));
else System.out.printf("%2d | %6d ... %2c\n", r, x/r, dchar.charAt(x % r));
x /= r;
if(x != 0) System.out.println(" + -------");
} while (x != 0);
System.out.print("변환된 값 : ");
for(int i = digits-1; i>=0; i--) System.out.print(d[i]);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("변환할 정수 입력 : ");
int num = sc.nextInt();
System.out.print("진수 입력 : ");
int n = sc.nextInt();
cardConvR(num,n);
}
}
/*
변환할 정수 입력 : 59
진수 입력 : 8
8 | 59
+ -------
8 | 7 ... 3
+ -------
0 ... 7
변환된 값 : 73
*/
'자료구조 & 알고리즘 > 알고리즘' 카테고리의 다른 글
[JAVA] 한 해의 경과 일 수 / 남은 일 수를 계산하는 알고리즘 (0) | 2023.01.25 |
---|---|
[JAVA] n이하의 소수를 구하는 알고리즘 (0) | 2023.01.24 |
[JAVA] 배열 비교, 복사, 역순으로 복사 알고리즘 (0) | 2023.01.22 |
[JAVA] 배열 요소를 역순으로 정렬하는 알고리즘 (0) | 2023.01.21 |
[JAVA] n개의 데이터 최댓값 구하기(난수 사용) (0) | 2023.01.20 |