간단한 진법 변환 코드입니다.
연습 겸 한번 짜본 내용입니다.
예시로 든 진법이 아니더라도 원하는 숫자로 바꾸시면 변환 가능합니다!
10진법 숫자를 2진법으로 변환
10진법 숫자 14를 2진법으로 바꾸면 1110이 됩니다.
식 | 값 | 나머지 |
14 / 2 | 7 | 0 |
7 / 2 | 3 | 1 |
3 / 2 | 1 | 1 |
1 / 2 | 0 | 1 |
주어진 값을 2로 나눈 나머지를 문자열에 더해갑니다. 이때 뒤에서부터 더해가야 하기에
새로 더해주는 값은 문자열의 앞에 더해줘야 합니다.
int num = 14;
String ans = ""; //값을 더해주기 위한 빈 문자열 선언
while (num > 0) {
ans = (num % 2) + ans; //문자열의 앞에 num을 2로 나눴을 때의 나머지를 더해준다.
num /= 2; //다음 턴을 위해 num을 2로 나눠준다.
}
System.out.println(ans); //결과 출력
숫자로 출력하고 싶다면 Integer.parseInt(ans)를 해주면 됩니다!
+ 변형) 10진법 숫자를 7진법 문자열로 변환
int num = 48;
String ans = "";
while (num > 0) {
ans = (num % 7) + ans;
num /= 7;
}
7진법 숫자(또는 문자열)를 10진법 숫자로 변환 - Integer.parseInt 사용
보통 Integer.parseInt()는 문자열을 int형으로 바꾸는 데에 많이 사용하지만,
매개변수를 하나 더 줘서
Integer.parseInt(문자열, 진법) 형태로 사용하면
주어진 진법의 숫자를 10진수 int형으로 변환해 줍니다.
그래서 "100"이라는 7진수 문자열을 주면, 49라는 10진수 숫자로 바꿔 줍니다.
int num = 100;
String str = num + ""; //만약 int형의 진법을 바꾸고싶다면 먼저 문자열 형태로 변환
int ans = Integer.parseInt(str, 7);
숫자를 거꾸로 출력하기
마지막 숫자부터 얻기 위해서 주어진 num을 10으로 나눈 나머지를 결과값인 ans에 더해줍니다.
즉, num % 10을 한번씩 해서 계속해서 마지막 값을 구합니다.
이때, 기존에 구해놓은 결과값에 10을 곱해서 자리값을 구분해 줍니다.
즉, 처음에 구한 끝값이 9였다면 그 다음 스텝은 98이 되어야 하기 때문에,
9에 자리를 구분하기 위해 10을 곱해주고, 새롭게 구한 나머지값인 8을 더해줍니다.
주어진 num이 0보다 클동안 계속 반복해줍니다.
int num = 123456789;
int ans = 0;
while (num > 0) {
ans = (ans * 10) + (num % 10);
num /= 10;
}
'algorithm > 개념 공부' 카테고리의 다른 글
다익스트라 vs 크루스칼 비교 (java) (1) | 2020.02.01 |
---|
댓글