본문 바로가기

JAVA/알고리즘 예제

[JAVA] 진법 변환(Radix Transformation)

10진수를 2진수로 변환하기


package jungbo;


import java.util.InputMismatchException;

import java.util.Scanner;


public class T41DecimalToBinary {

public static void main(String[] args) {

int num;//변환 할 10진수를 입력받을 변수

int print;//출력을 위한 변수

Scanner scan = new Scanner(System.in);

while(true){

try{

System.out.print("10진수를 입력하세요. : ");

num = scan.nextInt();

print = num;

break;

}catch(InputMismatchException ex){

System.out.println("숫자만 입력해야 합니다.");

}

}

scan.close();

int cnt=0;//배열의 자리수

int  mok;//몫

int na;//나머지

int Binary[] = new int[30];//2의 30승까지..

while(true){

mok = num/2;

na = num-mok*2;//num%2

Binary[cnt] = na;

if(mok==0){

break;

}

num=mok;

cnt++;

}

System.out.print(print+"(10) = ");

for(int i=0;i<=cnt;i++){

System.out.print(Binary[cnt-i]);

}

System.out.print("(2)");

}

}


10진수를 임의의 진수로 변환하기


가중치를 이용한 진법 변환

10진수 -> 2진수

10진수 -> 8진수

10진수 -> 16진수


package jungbo;


import java.util.InputMismatchException;

import java.util.Scanner;


public class T43DecimalTransformation {

public static void main(String[] args) {

Object hex[] = {0,1,2,3,4,5,6,7,8,9,"A","B","C","D","E","F"};

Object ans[] = new Object[30];

int cnt=0;//배열의 자리수

int dec,rad;//변환할 10진수, 변환될 진수

int mok,na;//몫, 나머지

int print; //출력을 위한 변수

Scanner scan = null;

while(true){

try{

scan = new Scanner(System.in);

System.out.print("10진수를 입력하세요. : ");

dec = scan.nextInt();

print = dec;

break;

}catch(InputMismatchException ex){

System.out.println("숫자만 입력해야 합니다.");

}

}

while(true){

try{

scan = new Scanner(System.in);

System.out.println("2,8,16진수 중에서");

System.out.print("변환하고싶은 진수를 입력하세요. : ");

rad = scan.nextInt();

if(rad == 2 || rad == 8 || rad ==16){

break;

}else{

System.out.println("2,8,16진수만 입력해야 합니다.");

}

}catch(InputMismatchException ex){

System.out.println("숫자만 입력해야 합니다.");

}

}

scan.close();

int weg=1;//가중치

while(weg<=dec){

weg=weg*rad;//ex) dec가 13, rad가 2일 경우 가중치를 2, 4, 8, 16까지 만들어줌

}

while(weg>1){//가중치가 1이 될 때까지 반복

weg = weg/rad;//ex) 13=8+4+1 이므로 8부터 시작하도록 한다.

mok = dec/weg;//10진수를 나눈 몫만큼 배열에 저장하기 위해 

na = dec-mok*weg;//dec%weg //다음 싸이클을 실행하기 위한 나머지

if(mok>10){

ans[cnt]=hex[mok];//16진수일 경우 10이상이면 A~F를 넣어주기

}else ans[cnt]=mok;//몫을 배열에 넣어준다

cnt++;//다음 자리수로 이동

dec=na;//입력한 10진수에 나머지를 넣어준다(다음 자리수로 넘어가기)

}

System.out.print(print+"(10) = ");

for(int i=0;i<cnt;i++){

System.out.print(ans[i]);

}

if(rad==2){//2진수 변환 출력 

System.out.println("(2)");

}

else if(rad==8){//8진수 변환 출력

System.out.println("(8)");

}

else{//16진수 변환 출력

System.out.println("(16)");

}

}

}







'JAVA > 알고리즘 예제' 카테고리의 다른 글

[JAVA] 소수의 개수 구하기  (2) 2016.09.07
[JAVA] 행렬 변환  (1) 2016.09.06
[JAVA] 소인수 분해(Integer Factorization)  (1) 2016.09.06
[JAVA] 대각선 채우기(diagonal)  (1) 2016.09.05
[JAVA] 합병(Merge)  (1) 2016.09.05