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
*/