Programming/Programming 알고리즘 연습
진법 변환(2, 8, 16진수)
Vita500cc
2020. 7. 15. 19:15
문제 설명
=> 정수를 입력받고, 입력받은 정수의 2진수, 8진수, 16진수 결과값 출력
코드 작성 방식
1. 사용자에게 정수값을 입력 받음
2. 진법 변환할 conversion 메소드에 입력받은 값을 매개변수로 전달
3. 정수 외의 값이 입력되었을 경우 정수변환시 Exception이 발생할 수 있으므로 안내문구 및 예외처리
4. 정상값 입력시 입력값을 정수형 변수 num에 대입
5. num의 값을 2 or 8 or 16으로 나눈 나머지를 각String 변수에 넣고, 몫을 다시 num 변수에 대입
6. num의 값이 0이 될때까지 5번의 과정을 반복
7. 결과값 출력
8. 16진수의 경우 10~15의 숫자를 A~F로 치환할 필요가 있으므로 hex메소드의 switch구문을 통해 치환하여 출력
메소드 설명
=> main : 숫자를 입력받고, conversion 메소드 호출
=> conversion : 전달받은 숫자의 2진수, 8진수, 16진수 결과물 출력(16진수 계산시 hex 메소드 호출)
=> hex : 16진수로 계산한 결과물이 10~15사이의 숫자일 경우 'A'~'F'로 치환하여 반환
소스코드
public class main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("진법 변환할 숫자 입력 : ");
String num = sc.nextLine();
sc.close();
conversion(num);
}
private static void conversion(String strNum) {
String binResult = "";
String octResult = "";
String hexResult = "";
int temp = 0;
try {
temp = Integer.parseInt(strNum);
} catch (Exception e) {
System.err.println("잘못된 입력입니다.");
System.out.println(e.getMessage());
e.printStackTrace();
return;
}
// 2진수로 변환
int num = temp;
while (num != 0) {
binResult = (String.valueOf(num % 2) + " ") + binResult;
num /= 2;
}
System.out.println("2진수 변환 : " + binResult);
// 8진수로 변환
num = temp;
while (num != 0) {
octResult = (String.valueOf(num % 8) + " ") + octResult;
num /= 8;
}
System.out.println("8진수 변환 : " + octResult);
// 16진수로 변환
num = temp;
while (num != 0) {
hexResult = (hex(num % 16) + " ") + hexResult;
num /= 16;
}
System.out.println("16진수 변환 : " + hexResult);
}
private static String hex(int num) {
String result = "";
//10보다 큰 값이 들어왔을 때만 값 치환작업 수행
if(num >= 10) {
//A의 아스키 코드값이 65이므로 정수값에서 + 55
num += 55;
result = String.valueOf((char)num);
}else {
result = String.valueOf(num);
}
return result;
}
}