Algorithm/Cpp C#
[Cpp] 백준 1008번 A/B
Pretty Garbage
2023. 6. 19. 12:44
기초 사칙연산 문제긴한데 올리는 이유는 자료형이 표현할 수 있는 범위에 대한 함정이 있기 때문
일단 제 풀이는 아래와 같은데 (검색해보니 풀이 방법은 다양했음)
#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;
}