[C++] cout의 유효 숫자
by 구설구설cout의 유효 숫자
C++ 출력인 cout의 유효 숫자는 6자리로 설정되어 있다.
따라서 코딩테스트를 풀거나 매우 정밀한 수를 출력해야 하는 경우에 소수를 정확하게 출력하지 못해서 낭패를 겪는 경우도 많다.
#include <iostream>
using namespace std;
int main() {
double pi = 3.14159265358979;
cout << pi; // 3.14159
}
위 코드처럼 아무리 정밀하게 수를 정의한다고 해도 출력은 동일하지 않다.
cout.precision()
cout의 유효 숫자를 설정하는 방법은 ~cout.precision()~을 사용하면 된다.
#include <iostream>
using namespace std;
int main() {
double pi = 3.14159265358979;
cout.precision(10);
cout << pi; // 3.141592654
}
~cout.precision(10)~은 cout이 수를 출력할 때 유효 숫자 10자리까지 출력할 것을 의미한다.
~3.141592653~이 아닌 ~3.141592654~ 가 출력된 이유는 유효 숫자 11자리에서 반올림을 수행해 10자리를 출력했기 때문이다.
cout << fixed
cout이 출력하는 소수 이하의 자릿수를 고정하는 ~cout << fixed~도 있다.
#include <iostream>
using namespace std;
int main() {
double pi = 3.14159265358979;
cout.precision(10);
cout << fixed;
cout << pi << '\n'; // 3.1415926536
}
위 코드는 cout을 소수 열 번째 자리까지 출력한다.
예시
백준 2896
무알콜 칵테일
시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
1 초 128 MB 2046 1094 978 56.827%
문제
상근이와 지수는 마트에서 오렌지 주스, 사과 주스, 파인애플 주스를 구매했다. 그들은 인터넷에서 찾은 방법으로 무알콜 칵테일을 만들어 학교에서 팔려고 한다. 하지만, 칵테일을 만드는 방법을 찾기 전에 주스를 구매했기 때문에, 주스가 남을 수도 있다.
무알콜 칵테일을 만드는데 필요한 오렌지, 사과, 파인애플 주스의 비율과 구매한 주스의 양이 주어진다. 칵테일을 최대한 많이 만들었을 때, 각 주스가 얼만큼 남는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 구매한 오렌지, 사과, 파인애플 주스의 양 A, B, C가 주어진다. (1 ≤ A, B, C ≤ 500)
둘째 줄에 칵테일을 만드는데 필요한 각 주스의 비율 I, J, K가 주어진다. (1 ≤ I, J, K ≤ 50)
출력
첫째 줄에 칵테일을 최대한 많이 만들었을 때, 각 주스가 얼만큼 남는지를 공백으로 구분하여 출력한다. 정답과의 오차는 10^-4까지 허용한다.
정답
#include <iostream>
using namespace std;
double a, b, c;
double a2, b2, c2;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> a >> b >> c >> a2 >> b2 >> c2;
double rate = 999999;
rate = min(rate, min(a / a2, min(b / b2, c / c2)));
cout.precision(10);
cout << a - rate * a2 << " " << b - rate * b2 << " " << c - rate * c2;
}
정답과의 오차를 $10^{-4}$까지 허용하기에, ~cout.precision()~을 사용해서 많은 유효숫자를 출력하도록 했다.
'Language > C++' 카테고리의 다른 글
[C++] 문자열 스트림(stringstream) (0) | 2024.10.16 |
---|
블로그의 정보
공부중임
구설구설