티스토리 뷰

728x90

 백준 1008번 문제는 사칙연산 중 나눗셈을 코딩으로 구현하는 문제입니다. 덧셈, 뺄셈, 곱셈과 같은 다른 사칙연산 문제들은 문제 그대로 풀어도 잘 풀렸지만 백준 1008번 문제는 한번 더 생각을 해봐야하는 문제라서 포스팅해보려합니다.

 


Q.1008 문제

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

입력

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

출력

첫째 줄에 A/B를 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-9 이하이면 정답이다. (10의 -9제곱)


 이 문제를 보고 고려해야할 점은 두가지입니다. 첫번째는 자료형, 두번째는 소수점자릿수입니다.

 

 1.  자료형

 C++에는 자료형이 다양하게 있습니다. 그 중에서 보통 숫자는 정수를 다루는 int를 주로 사용하고 문자는 char를 자주 사용합니다. 1008번 문제는 int로 문제를 풀면 안됩니다. int는 4byte를 차지하는 자료형으로 정수를 다룰때 사용합니다. 이 문제와 같이 소수를 사용하는 문제에서는 실수를 다루는 float, double을 사용해야합니다. 둘 중에서도 이 문제에서는 double이 적합합니다. 그 이유는 float와 double의 차이점에서 알 수 있습니다. 

 float과 double의 차이점은 차지하는 byte의 수와 정밀도에 있습니다. float는 4byte를 차지하고 6자리 소수점까지이고 double은 8byte를 차지하고 15자리 소수점까지입니다. 위의 문제에서는 실제 정답과 출력값의 절대오차 또는 상대오차가 10의 -9제곱 이하이면 정답이므로 double을 써야합니다.

 

 2. 소수점자릿수

 double을 썼는데도 cout을 사용해 출력한다면 소수점 6자리 숫자까지만 나옵니다. 출력 제한이 있기 때문에 소수점이 적어도 9자리까지는 나와야합니다. 그래서 소수점 열번째자리까지 출력하도록 설정하는 cout.precision(10); 를 코드에 추가합니다.

 


정답

#include <iostream>

using namespace std;

int main(){
    double a,b;

    cin>>a;
    cin>>b;
    cout.precision(10); 
    cout<<a/b<<endl;   

}

 

 

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함