세 개의 이중 값이 주어졌다고 가정합니다. 형식을 지정하고 다음 형식으로 인쇄해야 합니다.
-
첫 번째 값의 정수 부분을 소문자로 된 16진수 형식으로 인쇄해야 합니다.
-
두 번째 값을 소수점 이하 두 자리까지 인쇄해야 하며, 그 앞에 부호를 붙여 양수인지 음수인지 보여야 합니다. 인쇄할 두 번째 값은 오른쪽 정렬되어야 하며 길이는 15자여야 하며 왼쪽의 사용하지 않은 위치에 밑줄이 채워져 있어야 합니다.
-
세 번째 값은 과학적 표기법에서 소수점 이하 아홉 자리까지 인쇄해야 합니다.
따라서 입력이 256.367, 5783.489, 12.5643295643과 같으면 출력은
0x100 _______+5783.49 1.256432956E+01
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
hex 플래그는 16진수 형식으로 값을 인쇄하고, showbase 플래그는 16진 값에 대한 '0x' 접두사를 표시하고, 왼쪽 플래그는 값 오른쪽에 채우기 문자를 삽입하여 출력 필드에 값을 채우고, nouppercase 플래그는 다음을 인쇄합니다. 모두 소문자로 출력합니다.
-
오른쪽 플래그는 값 왼쪽에 채우기 문자를 삽입하여 출력 필드에 값을 채우고, fixed 플래그는 고정 소수점 표기법으로 값을 인쇄하고, set(15)는 출력 필드 길이를 15로 설정하고, showpos 플래그는 출력 앞에 '+' 기호를 삽입하고, setfill('_')은 출력을 밑줄로 채우고, setprecision()은 값의 정밀도를 소수점 이하 2자리까지 설정합니다.
-
setprecision()은 소수점 이하 9자리까지 값의 정밀도를 설정하고, 과학적 플래그는 과학적 표기법으로 값을 인쇄하고, 대문자는 출력 값을 모두 대문자로 만들고, noshowpos는 출력 값 앞에 양수 부호를 생략합니다.
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <iostream> #include <iomanip> using namespace std; void solve(double a, double b, double c) { cout << hex << showbase << nouppercase << left << (long long) a << endl; cout << right << fixed << setw(15) << setfill('_') << setprecision(2) << showpos << b << endl; cout << setprecision(9) << scientific << uppercase << noshowpos << c << endl; } int main() { solve(256.367, 5783.489, 12.5643295643); return 0; }
입력
256.367, 5783.489, 12.5643295643
출력
0x100 _______+5783.49 1.256432956E+01