PS/Math

백준 15792번: A/B - 2 (Java)

닻과매 2022. 6. 15. 20:32

https://www.acmicpc.net/problem/15792

 

15792번: A/B - 2

첫째 줄에 A와 B가 주어진다. (0 < A, B ≤ 10,000)

www.acmicpc.net

문제

두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 A와 B가 주어진다. (0 < A, B ≤ 10,000)

출력

첫째 줄에 A/B를 출력한다.

서브태스크

번호배점제한
1 1 절대/상대 오차는 10-1 까지 허용한다.
2 2 절대/상대 오차는 10-2 까지 허용한다.
3 6 절대/상대 오차는 10-6 까지 허용한다.
4 9 절대/상대 오차는 10-9 까지 허용한다.
5 20 절대/상대 오차는 10-20 까지 허용한다.
6 50 절대/상대 오차는 10-50 까지 허용한다.
7 100 절대/상대 오차는 10-100 까지 허용한다.
8 312 절대/상대 오차는 10-312 까지 허용한다.
9 500 절대/상대 오차는 10-500 까지 허용한다.
10 1000 절대/상대 오차는 10-1000 까지 허용한다.

 


 

풀이

Java에서 double로 나눗셈을 수행해도 자리수는 13?자리까지밖에 표현할 수 없다. 그러면 어떻게 해야할까? -> 초등학교 때 배운 나눗셈 과정을 그대로 코드로 구현하면 된다.

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.io.*;
import java.util.*;
 
public class Main {
 
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuilder sb = new StringBuilder();
        int A = Integer.parseInt(st.nextToken());
        int B = Integer.parseInt(st.nextToken());
        sb.append(A/B+".");
        A = 10 * (A - B *(A/B));
        int T = 1500;
        while (T-- > 0) {
            sb.append(A/B+"");
            A = 10 * (A - B *(A/B));
        }
        System.out.println(sb.toString());
    }
 
}
 
cs