자바 문법
자바 소수점 아래 값 구하기 클린코드를 향하여
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...
원 링크의 해설이 예술이다. 다시 풀어보고 싶다.
