728x90
반응형

문제

두 정수 a와b가 주어집니다.

실수 a/b의 값을 소수점 21번째 자리에서 내림하여 출력하는 프로그램을 작성하시오.

문제

1차(실패)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        double a, b;
        a=sc.nextDouble();
        b=sc.nextDouble();
        double ans = a/b;

        // System.out.println(ans);
        System.out.printf("%.20f", ans);
    }
}

이유

java에서 float형은 7자리 까지만, double형은 16자리 까지만 연산이 가능하다.

문제에서는 21번째 자리에서 버림하라 했으니, 연산이 닿지 못한다.

 

2차(성공)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int a, b;
        a=sc.nextInt();
        b=sc.nextInt();
        
        System.out.print(a/b + ".");

        a%=b;
        for (int i=0;i<20;i++){
            a*=10;
            System.out.print(a/b);
            a%=b;
        }

    }
}

 

해설

21번째 자리까지의 나머지를 구하려면 반복문을 통해서 나머지를 나눠준다.

첫 몫을 구해서 출력하고, 이후 a%=b를 통해 나머지를 변수 a에 대입한다.

이후 for문을 통해 a에 10을 곱하고 b로 나눠주면서 출력하는 동작을 하면된다.

이후 매번 a%=b를 통해 a값을 다음 값으로 초기화 시켜준다.

 

728x90
반응형

'알고리즘 > java' 카테고리의 다른 글

[BOJ] 달팽이(1913), 나선형 배열_Java  (0) 2024.07.24