코어 자바9 연습문제 (1)-1, 연습 문제
2022. 6. 30. 22:01ㆍ자바
728x90
반응형
이클립스를 활용해 교재 뒷편에 있는 문제를 풀어봤다.
문제 난이도는 높지는 않지만 처음 자바를 다뤄보면서 재밌는 문제가 많았다.
챕터 1의 연습 문제는 총 16문제로 오늘은 앞에 있는 8문제를 풀었다.
각 문제는 편의를 위해 함수로 분할하여 문제를 풀었다.
1. 정수를 읽어서 2진수, 8진수, 16진수로 출력하는 프로그램을 작성하라. 읽어온 정수의 역수를 16진수 부동소수점 수로 출력하라.
public static void problem01() {
// 1. 정수를 읽어서 2진수, 8진수, 16진수로 출력하는 프로그램을 작성하라. 읽어온 정수의 역수를 16진수 부동소수점 수로 출력하라.
Scanner in = new Scanner(System.in); // 아직 동적할당
int number = in.nextInt();
String bi = Integer.toString(number, 2);
String oc = Integer.toString(number, 8);
String he = Integer.toString(number, 16);
System.out.println("2진수: " + bi + "\n8진수: " + oc + "\n16진수: " + he + "\n역수: " + (1.0 / number));
}
2. 정수(양의 정수 또는 음의 정수)로 된 각도를 읽고 0~359도 사이의 값으로 정규화하는 프로그램을 작성하라.
public static void problem02() {
// 2. 정수(양의 정수 또는 음의 정수)로 된 각도를 읽고 0~359도 사이의 값으로 정규화하는 프로그램을 작성하라.
Scanner in = new Scanner(System.in);
int n = in.nextInt();
System.out.println(n%360);
}
3. 조건 연산자만 사용해 정수 세 개를 읽고 최댓값을 출력하는 프로그램을 작성하라. Math.max를 사용해 같은 프로그램을 작성하라.
public static void problem03_1() {
///// 3. 조건 연산자만 사용해 정수 세 개를 읽고 최댓값을 출력하는 프로그램을 작성하라. Math.max를 사용해 같은 프로그램을 작성하라.
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int c = in.nextInt();
if (a >= b && a >= c)
System.out.println(a);
else if (b >= a && b >= c)
System.out.println(b);
else
System.out.println(c);
}
public static void problem03_2() {
// 3. 조건 연산자만 사용해 정수 세 개를 읽고 최댓값을 출력하는 프로그램을 작성하라. Math.max를 사용해 같은 프로그램을 작성하라.
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int c = in.nextInt();
System.out.println(Math.max(a, Math.max(b, c)));
}
4. double 타입인 양수 값 중 가장 작은 값과 가장 큰 값을 출력하는 프로그램을 작성하라(자바 API에서 Math.nextUp을 찾는다.)
public static void problem04() {
// 4. double 타입인 양수 값 중 가장 작은 값과 가장 큰 값을 출력하는 프로그램을 작성하라.
System.out.println("Min: " + Math.nextUp(0.0));
System.out.println("Max: " + Math.nextDown(Double.POSITIVE_INFINITY));
}
5. int의 최댓값보다 큰 double을 int 타입으로 변환하면 무슨 일이 일어나는가? 직접 시도해 보라.
public static void problem05() {
// 5. int의 최댓값보다 큰 double을 int 타입으로 변환하면 무슨 일이 일어나는가? 직접 시도해 보라.
System.out.println((int) 2E30);
}
6. BigInteger를 사용해 팩토리얼 n!을 계산하는 프로그램을 작성하라. 그리고 프로그램을 이요해 1,000!을 계산하라.
public static BigInteger factorial(int n) {
BigInteger result = BigInteger.valueOf(1);
for (int i = 1; i <= n; i++)
result = result.multiply(BigInteger.valueOf(i));
return result;
}
public static void problem06() {
// 6. BigInteger를 사용해 팩토리얼 n!을 계산하는 프로그램을 작성하라. 그리고 프로그램을 이요해 1,000!을 계산하라.
System.out.println(factorial(1000));
}
7. 0~4294967295 사이의 정수 두 개를 읽어서 int 변수에 저장한 후 부호 없는 합계, 차이, 곱, 몫, 나머지를 계산해 표시하는 프로그램을 작성하라
public static void problem07() {
// 7. 0~4294967295 사이의 정수 두 개를 읽어서 int 변수에 저장한 후 부호 없는 합계, 차이, 곱, 몫, 나머지를 계산해 표시하는 프로그램을 작성하라.
Scanner in = new Scanner(System.in);
int a = (int) in.nextLong();
int b = (int) in.nextLong();
System.out.println("합계: " + (Integer.toUnsignedLong(a) + Integer.toUnsignedLong(b)));
System.out.println("차이: " + (Integer.toUnsignedLong(a) - Integer.toUnsignedLong(b)));
System.out.println("곱: " + BigInteger.valueOf((Integer.toUnsignedLong(a))).multiply(BigInteger.valueOf(Integer.toUnsignedLong(b))));
System.out.println("몫: " + (Integer.toUnsignedLong(a) / Integer.toUnsignedLong(b)));
System.out.println("나머지: " + (Integer.toUnsignedLong(a) % Integer.toUnsignedLong(b)));
}
8. 문자열을 읽어서 비어 있지 않는 부분 문자열을 모두 출력하는 프로그램을 작성하라.
public static void problem08() {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String temp = in.next();
System.out.println(temp);
}
}
전체 코드
import java.util.Scanner;
import java.math.*;
public class Main {
public static void problem01() {
// 1. 정수를 읽어서 2진수, 8진수, 16진수로 출력하는 프로그램을 작성하라. 읽어온 정수의 역수를 16진수 부동소수점 수로 출력하라.
Scanner in = new Scanner(System.in); // 아직 동적할당
int number = in.nextInt();
String bi = Integer.toString(number, 2);
String oc = Integer.toString(number, 8);
String he = Integer.toString(number, 16);
System.out.println("2진수: " + bi + "\n8진수: " + oc + "\n16진수: " + he + "\n역수: " + (1.0 / number));
}
public static void problem02() {
// 2. 정수(양의 정수 또는 음의 정수)로 된 각도를 읽고 0~359도 사이의 값으로 정규화하는 프로그램을 작성하라.
Scanner in = new Scanner(System.in);
int n = in.nextInt();
System.out.println(n%360);
}
public static void problem03_1() {
///// 3. 조건 연산자만 사용해 정수 세 개를 읽고 최댓값을 출력하는 프로그램을 작성하라. Math.max를 사용해 같은 프로그램을 작성하라.
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int c = in.nextInt();
if (a >= b && a >= c)
System.out.println(a);
else if (b >= a && b >= c)
System.out.println(b);
else
System.out.println(c);
}
public static void problem03_2() {
// 3. 조건 연산자만 사용해 정수 세 개를 읽고 최댓값을 출력하는 프로그램을 작성하라. Math.max를 사용해 같은 프로그램을 작성하라.
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int c = in.nextInt();
System.out.println(Math.max(a, Math.max(b, c)));
}
public static void problem04() {
// 4. double 타입인 양수 값 중 가장 작은 값과 가장 큰 값을 출력하는 프로그램을 작성하라.
System.out.println("Min: " + Math.nextUp(0.0));
System.out.println("Max: " + Math.nextDown(Double.POSITIVE_INFINITY));
}
public static void problem05() {
// 5. int의 최댓값보다 큰 double을 int 타입으로 변환하면 무슨 일이 일어나는가? 직접 시도해 보라.
System.out.println((int) 2E30);
}
public static BigInteger factorial(int n) {
BigInteger result = BigInteger.valueOf(1);
for (int i = 1; i <= n; i++)
result = result.multiply(BigInteger.valueOf(i));
return result;
}
public static void problem06() {
// 6. BigInteger를 사용해 팩토리얼 n!을 계산하는 프로그램을 작성하라. 그리고 프로그램을 이요해 1,000!을 계산하라.
System.out.println(factorial(1000));
}
public static void problem07() {
// 7. 0~4294967295 사이의 정수 두 개를 읽어서 int 변수에 저장한 후 부호 없는 합계, 차이, 곱, 몫, 나머지를 계산해 표시하는 프로그램을 작성하라.
Scanner in = new Scanner(System.in);
int a = (int) in.nextLong();
int b = (int) in.nextLong();
System.out.println("합계: " + (Integer.toUnsignedLong(a) + Integer.toUnsignedLong(b)));
System.out.println("차이: " + (Integer.toUnsignedLong(a) - Integer.toUnsignedLong(b)));
System.out.println("곱: " + BigInteger.valueOf((Integer.toUnsignedLong(a))).multiply(BigInteger.valueOf(Integer.toUnsignedLong(b))));
System.out.println("몫: " + (Integer.toUnsignedLong(a) / Integer.toUnsignedLong(b)));
System.out.println("나머지: " + (Integer.toUnsignedLong(a) % Integer.toUnsignedLong(b)));
}
public static void problem08() {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String temp = in.next();
System.out.println(temp);
}
}
public static void main(String[] args) {
// 1번 문제
// problem01();
// 2번 문제
// problem02();
// 3번 문제
// problem03_1();
// problem03_2();
// 4번 문제
// problem04();
// 5번 문제
// problem05();
// 6번 문제
// problem06();
// 7번 문제
// problem07();
// 8번 문제
// problem08();
// 9번 문제
// problem09();
// 10번 문제
// problem10();
// 11번 문제
// problem11();
// 12번 문제
// problem12();
// 13번 문제
// problem13();
// 14번 문제
// problem14();
// 15번 문제
// problem15();
// 16번 문제
// problem16();
}
}
- 각 문제를 풀고나서 문제에 해당하는 함수를 main에서 실행해 test를 진행했다.
728x90
반응형
'자바' 카테고리의 다른 글
이펙티브 자바, 의존 객체 추입 (0) | 2023.02.26 |
---|---|
자바, 싱글톤 패턴 실습 (0) | 2022.09.03 |
자바(3), 인터페이스 (0) | 2022.08.31 |
자바(2), 객체 지향 프로그래밍 (0) | 2022.08.29 |
코어 자바9 (1), 기본 프로그래밍 구조 (0) | 2022.06.29 |