본문 바로가기
Algorithm/Cpp C#

[Cpp] 백준 1008번 A/B

by Pretty Garbage 2023. 6. 19.

기초 사칙연산 문제긴한데 올리는 이유는 자료형이 표현할 수 있는 범위에 대한 함정이 있기 때문

 

일단 제 풀이는 아래와 같은데 (검색해보니 풀이 방법은 다양했음)

#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char* argv[])
{
    double a, b; cin >> a >> b;

    cout << fixed;
    cout.precision(13);

    std::cout << a / b << std::endl;
    
    return 0;
}

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

 

라는 문구가 있는데 상대오차가 10^-9 이다.

 

하지만 float은 소주점 이하 정밀도가 6자리 이고 double은 15자리이다. 그런 이유로 double로 자료형을 바꿔주면 된다.

 

추가) 문제가 조금 잘못된게 

 

두 정수를 입력받으라고 했는데 double로 입력받아도 문제 없이 됨...

 

그래서 지피티의 도움을 받아서 조금 더 다듬어보자면 아래와 같아지겠다. 위는 백준 돌렸을때 맞았습니다! 떴는데 아래는 안돌려봄

#include <iomanip>
#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char* argv[])
{
    int a, b; cin >> a >> b;

    cout << fixed << std::setprecision(13);
    std::cout << static_cast<double>(a)/ b << std::endl;
    
    return 0;
}