[Code Tree - Novice Mid] 04-2. 시뮬레이션 I: Notation
JAVA 문법으로 작성함.
Novice Mid: 04. 시뮬레이션 I
2. Notation
1. 2진수로 변환하기
=> 십진수 n이 주어지면 0과 1로만 이루어진 2진수로 그 수를 변환하여 출력하는 프로그램
조건: 0 ≤ n ≤ 100,000
코드:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] digits = new int[20];
int cnt = 0;
while (true) {
if(n < 2) {
digits[cnt++] = n;
break;
}
digits[cnt++] = n % 2;
n /= 2;
}
// 2진수 출력
for(int i = cnt - 1; i >= 0; i--)
System.out.print(digits[i]);
}
}
입력:
29
출력:
11101
2. 10진수로 변환하기
=> 0과 1로 이루어진 2진수로 n이 주어지면 그 수를 십진수로 변환하여 출력하는 프로그램
조건: n은 8자리 이하의 2진수
코드:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String binaryString = sc.nextLine();
int num = 0;
for(int i = 0; i < binaryString.length(); i++) {
num = num * 2 + (binaryString.charAt(i) - '0');
}
System.out.print(num);
}
}
입력:
11101
출력:
29
3. 여러가지 진수변환
=> 정수 N이 주어지고, 바꿀 진수 B가 주어지면, 10진수인 정수 N을 B진수로 변경하여 출력하는 프로그램
- B: 4, 8만 가능
조건: 1 ≤ N ≤ 1000
코드:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int B = sc.nextInt();
String result = convertToBase(N, B); // N을 B진수로 변환하는 메서드
System.out.println(result);
sc.close();
}
public static String convertToBase(int N, int B) {
StringBuilder sb = new StringBuilder();
while (N > 0) {
int remainder = N % B; // N을 B로 나눈 나머지
sb.insert(0, remainder); // 나머지를 결과 문자열의 맨 앞에 삽입
N /= B; // N을 B로 나눈다.
}
return sb.length() == 0 ? "0" : sb.toString();
}
}
입력:
111 4
출력:
1233
입력:
64 8
출력:
100
4. 십진수와 이진수 2
=> 이진수 N이 주어지면 십진수로 바꿔 17배를 하고 다시 이진수로 나타내어 출력하는 프로그램
조건: N의 최대 자리수: 10
코드:
import java.util.Scanner;
public class Main {
public static final int MAX_DIGIT = 20;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String binaryInput = sc.next();
// 이진수 -> 십진수
int decimal = 0;
for (int i = 0; i < (int)binaryInput.length(); i++) {
decimal = decimal * 2 + (binaryInput.charAt(i) - '0');
}
// *17
decimal *= 17;
// 다시 이진수로 변환
int[] digits = new int[MAX_DIGIT];
int cnt = 0;
while (true) {
if (decimal < 2) {
digits[cnt++] = decimal;
break;
}
digits[cnt++] = decimal % 2;
decimal /= 2;
}
// 이진수 출력
for (int i = cnt - 1; i >= 0; i--) {
System.out.print(digits[i]);
}
sc.close();
}
}
입력:
10011
출력:
101000011
5. 진수 to 진수
=> 정수 a와 b가 주어지고, a진수로 표현된 어떤 수 n이 주어지면, n을 b진수로 변환하여 출력하는 프로그램
조건: 2 ≤ a,b ≤ 9 / 1 ≤ n의 자리수 ≤ 9
코드:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
String n = sc.next();
int decimal = 0;
for (int i = 0; i < n.length(); i++) {
decimal = decimal * a + (n.charAt(i) - '0');
}
// 10진수 -> b진수
StringBuilder result = new StringBuilder();
while (decimal > 0) {
result.insert(0, decimal % b);
decimal /= b;
}
System.out.println(result.length() > 0? result.toString() : "0");
sc.close();
}
}
입력:
8 2
11
출력:
1001