문제 출처 : BOJ 1008 - A/B https://www.acmicpc.net/problem/1008
두 정수를 나눈 값을 출력하는 문제이다.
정답과 출력값의 오차가 10^(-9) 이하여야 한다고 한다.
C언어에서라면 printf()를 사용하여 %.10f라고 썼을 것이다.
C++에서 cout을 사용하는 경우에는 어떻게 출력해야 하는지 고민을 거듭한 끝에,
윈도우 프로그래밍 시간에 배운 <iomanip> 라이브러리의 setprecision() 함수를 사용해보았다.
setprecision(p) 함수는 실수 유효 숫자 자릿수를 p로 지정하는 함수이다.
소수점을 제외한 숫자부분이 p만큼 출력되는 것이다.
소수점 아래부분이 나누어 떨어지는 경우에는 더이상 출력을 하지 않는다. (ex) 입력 4 5 출력 0.8)
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << setprecision(10) << (double)a / b << endl;
return 0;
}
소스 코드를 작성해본 후에 setprecision() 함수에 대해서 찾아보다가 fixed 라는 것을 발견했다.
setprecision() 앞에 fixed를 쓰면 setprecision(p)에서 p를 소수점 아래 자릿수로 지정할 수 있다.
정수 부분이 몇 자리가 나오는지에 상관없이 소수점 아래 자릿수만 설정할 수 있는 것이다.
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << fixed << setprecision(9) << (double)a / b << endl;
return 0;
}
이렇게 쓰면 된다.
그 대신, 이 친구는 소수점 아래부분이 나누어 떨어지는 경우에 지정한 자릿수만큼 0을 그대로 출력한다.
(ex) 입력 4 5 출력 0.800000000)
수업 시간에 <iomanip> 라이브러리 안에 setprecision() 함수 외에도 setw(), setfill() 함수가 있다는 것을 배웠는데,
setw(w)는 최소 출력 폭을 w로 지정하는 것이다.
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
cout << setw(5) << 123 << endl;
return 0;
}
이 코드를 실행하면 앞에 공백두칸이 있는 123이 출력된다.
setfill(c)는 채움(fill) 문자를 c로 지정하는 것이다. 기본 값은 공백이라서 위처럼 출력된 것 같다.
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
cout << setw(5) << setfill('*') << 123 << endl;
return 0;
}
이 코드를 실행하면 **123이 출력된다.
setw() 함수를 사용하다가 좌측 정렬을 할 수 있는 방법도 있을까해서 찾아봤더니,
left라는 걸 앞에 써주면 좌측 정렬이 된다고 한다.
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
cout << left << setw(5) << setfill('*') << 123 << endl;
return 0;
}
이 코드를 실행하면 123**이 출력된다.
같은 방식으로 right라고 쓰면 아무것도 쓰지 않았을 때처럼 우측 정렬이 된다.
internal이라는 것도 있었는데 부호는 가장 좌측에, 숫자는 가장 우측에 출력이 된다.
'BOJ' 카테고리의 다른 글
(C++) BOJ/백준 3986 - 좋은 단어 (0) | 2021.04.03 |
---|---|
(C++) BOJ/백준 2609 - 최대공약수와 최소공배수 (0) | 2021.04.03 |
(C) BOJ/백준 5635 - 생일 (0) | 2021.04.02 |
(C) BOJ/백준 11098 - 첼시를 도와줘! (0) | 2021.04.01 |
(C) BOJ/백준 15904 - UCPC는 무엇의 약자일까? (0) | 2021.03.31 |