BOJ - 쿼드트리 문제를 풀며, 다음과 같은 출력 방법이 필요했다.
쿼드트리를 구현하고, 주어진 출력 조건에 맞게 출력을 하려고 했으나 잘 되지 않았다.
사실 출력 방법의 문제가 아니라, for문을 돌면서 비트 값을 잘못 더해주고 있던 것이 문제였으나
이번 기회에 C++ 의 출력 방식에 대해 더 자세히 알게 되어서 정리해봤다.
int decimal = 42;
cout << decimal << '\n'; // 42
#include<bitset>
int binaryValue = 0b101010; // 2진수 (10진수 : 42)
cout << binaryValue << '\n'; // 42
cout << bitset<8>(binaryValue) << '\n'; // 00101010
bitset<n>(value) : value 를 n 의 자리의 2진수로 표현
int octValue = 052; // 8진수 (10진수 : 42)
cout << octValue << '\n'; // 42
cout << oct << octValue <<'\n'; // 52
int hexValue = 0x2A; // 16진수 (10진수 : 42)
cout << hexValue << '\n'; // 42
cout << hex << hexValue << '\n'; // 2a
cout << uppercase << hex << hexValue << '\n'; // 2A
C++ 에서 std:cin 으로 직접 16진수나 8진수를 입력받을 때는 별도의 문자열 파싱을 거쳐주자.
(기본적으로 10진수로 처리되기 때문)
std::showbase 를 사용하여 0x 또는 0 접두사를 표현한 방식으로 출력
int value = 42;
cout << showbase << hex << value << '\n'; // 0x2a
cout << uppercase << hex << value << '\n'; // 0X2A
cout << oct << value << '\n'; // 052
입출력 포맷 제어를 위해 다양한 기능을 제공하는 라이브러리.
| 코드 | 용도 |
|---|---|
| std::hex (16진수) , std::oct (8진수) , std::dec (10진수, 기본값) | 진법 출력 |
| std::showbase | 숫자의 진법에 따라 접두사 표시 |
| std::noshowbase | showbase 로 설정된 접두사를 숨기기 |
| std::uppercase | 16진수 출력 시 알파벳 대문자를 사용 |
| std::nouppercase | 알파벳 소문자로 출력 |
| 코드 | 용도 |
|---|---|
| std::setw(n) | 숫자를 출력할 최소 너비를 설정 |
| std::setfill(c) | std::setw 로 확보한 공간을 특정 문자로 채우기 |
| std::left / std::right | 출력 정렬 방향을 설정 |
C++ 로 알고리즘 문제를 풀다가 진법 변환, 출력 형식의 조건을 맞춰줄 때 참고하도록 하자.