자바 문법

자바 소수점 아래 값 구하기 클린코드를 향하여

Nickman 2024. 3. 28. 21:08

https://www.codetree.ai/missions/4/problems/a-divide-b?&utm_source=clipboard&utm_medium=text

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

첫 줄에 a/b의 값을 내림해서 소수점 20번째 자리까지 출력한다.

1) format 형식을 이용해서 코딩 해 보았다.

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();
        System.out.printf("%.14f",((double)a/b));
    }
}

4.66666666666667

내림한 값인 4.66666666666666 이 나와야 하는데, 7이 나왔다.

printf(format)을 이용해서 한 번에 출력하는 것은 쉽지 않았다.

코드트리에서 지원하는 [토론] 탭을 참고했다. 설명이 친절하다.

친절해

예를 들어보자.

1/7

10*1=10

10/7=1...3

3*10=30

30/7=4...2

2*10=20

20/7=2...6

...

1/7 의 몫은 0이고 소수점 아래 값은 142... 가 된다. 0.142...

예시 2

14/3 값의 소수점 아래 부분을 구해보자. (나누는 수가 10 이상인 경우)

14/3=4...2 

2*10=20

20/3=6...2

2*10=20

20/3=6...2

...

14/3=4.66666666... 이다.

예시 2

3/5 값의 소수점 아래 부분을 구해보자

3/5

3*10=30

30/5=6

몫이 0이므로 0.6 이다.

나의 풀이

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();
        int c=a/b; //몫
        int d=a%b; //나머지
        if(a>=b){ //  14/3
            System.out.print(c+".");
            for(int i=0;i<20;i++){
                c=(d*10)/b;
                d=(d*10)%b;
                System.out.print(c);
            }
        }else{ //  31/48
            System.out.print(0+"."); //0.
            c=(a*10)/b; //6 310/48
            d=(a*10)%b; //  22
            for(int i=0;i<20;i++){
                System.out.print(c); //6
                c=(d*10)/b; //220/48 =8
                d=(d*10)%b;

            }
        }
    }
}

//14/3=4...2    3/5->0.      3/7->0.     31/48->0.645833333333

//20/3=6...2    30/5=6...0   30/7=4...2  310/48=6...    6.45833333333
//20/3=6....2   0/5=0-> 0?   20/7=2...6     /48=4...

원 링크의 해설이 예술이다. 다시 풀어보고 싶다.