반응형
문제(출처)
두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 A와 B가 주어진다.(0 < A, B<10)
출력
첫째 줄에 A/B를 출력한다. 절대/상대 오차는 10-9 까지 허용한다.
예제 입력1
1 3
예제 출력2
0.33333333333333333333333333333333
예제 입력1
4 5
예제 출력2
0.8
내 풀이
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;
public class Main { public static void main(String args[]) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); try { // Test case1 /* String[] str = br.readLine().split(" "); double num1 = (Double.parseDouble(str[0])) ; double num2 = (Double.parseDouble(str[1])) ; int result = (int)((num1 / num2) * 1000000000); bw.write(String.valueOf((double)result/1000000000)); bw.flush(); bw.close(); */// Test case2 String[] str = br.readLine().split(" "); double num1 = (Double.parseDouble(str[0])); double num2 = (Double.parseDouble(str[1])); double result = (num1 / num2); System.out.printf("%.9f", result); } catch (IOException e) { e.printStackTrace(); }
}}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String args[]) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
try {
// Test case1
/*
String[] str = br.readLine().split(" ");
double num1 = (Double.parseDouble(str[0])) ;
double num2 = (Double.parseDouble(str[1])) ;
int result = (int)((num1 / num2) * 1000000000);
bw.write(String.valueOf((double)result/1000000000));
bw.flush();
bw.close();
*/
// Test case2
String[] str = br.readLine().split(" ");
double num1 = (Double.parseDouble(str[0]));
double num2 = (Double.parseDouble(str[1]));
double result = (num1 / num2);
System.out.printf("%.9f", result);
} catch (IOException e) {
e.printStackTrace();
}
}
}
내 풀이 해석
Test case1은 C++에서 풀었던 방법으로 Java에서 풀어보았습니다.
소수점 9자리 아래는 버리기 위해 상수를 곱해주고 다시 상수로 나눠주는 방법입니다.
문제점은 자리수가 오버플로우 되면 쓰레기 값으로 변경 됩니다. 그래서 틀렸다고 나오는 것 같습니다.
Text case2로 출력 형태만 변경하여 풀이하여 제출했고 정답을 맞추었습니다.
4 5의 0.8이 아니라 0.800000000 소수점이 나오는데 맞다니 좀 이상했습니다.
아쉬운 점
오랜만에 JAVA API를 봤습니다.
JAVA API보다 구글 검색이 더 편합니다.
학습/검색
1. Math.round(반올림)
class round {
public static void main(String[] args) {
System.out.println(Math.round(12.345*100)/100.0);
}
}
2. System.out.printf(반올림)
System.out.printf("%.2f", 12.3456); //결과값 12.35
3. String.format(반올림)
double d = 0.56789
String str = String.format("%.2f", fd;
System.out.println("str = " + str);
str = 0.57
4. DecimalFormat(반올림x)
double d = 0.56789
DecimalFormat format = new DecimalFormat(".##");
String str = format.format(d);
System.out.println("str = " + str);
str = 0.56
반응형
'개발(합니다) > 알고리즘&코테' 카테고리의 다른 글
알고리즘 단계별로 풀어보기 : BOJ-10430(나머지) (0) | 2018.12.11 |
---|---|
알고리즘 단계별로 풀어보기 : BOJ-10869(사칙연산) (0) | 2018.12.11 |
알고리즘 단계별로 풀어보기 : BOJ-10998(AxB) (0) | 2018.12.10 |
알고리즘 단계별로 풀어보기 : BOJ-11719(그대로 출력하기2) (0) | 2018.12.10 |
알고리즘 단계별로 풀어보기 : BOJ-11718(그래도 출력하기) (0) | 2018.12.10 |