Skip to content

문제 15 · 10진수 → 8진수 변환 오류 수정

문제 15 [4점]

아래 코드는 임의의 10진수를 입력으로 받아 8진수로 바꾸는 프로그램입니다. 아래 코드의 오류를 찾아 적절히 수정하시오.

cpp
cout << "10진수 입력: ";
int dec;
cin >> dec;

string oct;
oct += static_cast<char>(dec % 8);
dec /= 8;
oct += static_cast<char>(dec % 8);
cout << "변환된 8진수: " << oct << endl;
풀이 및 해설

이 코드에는 세 가지 오류가 있습니다.

오류 1 — 숫자를 문자로 잘못 변환static_cast<char>(dec % 8)0~7이라는 정수를 그대로 문자 코드로 변환하므로 눈에 보이지 않는 제어문자가 됩니다. 숫자 d를 문자 '0'~'7'로 만들려면 '0'을 더해야 합니다.

static_cast<char>(dec % 8 + ’0’)

오류 2 — 자릿수 처리가 2자리로 고정dec /= 8을 한 번만 하므로 8진수 2자리까지만 처리합니다. 몫이 0이 될 때까지 반복(while) 해야 임의의 크기를 변환할 수 있습니다.

오류 3 — 자릿수 순서가 뒤집힘 나머지는 낮은 자리부터 나오므로, 얻은 순서대로 이어붙이면 결과가 거꾸로 됩니다. 마지막에 뒤집어(reverse) 주어야 합니다.

수정본

cpp
cout << "10진수 입력: ";
int dec;
cin >> dec;

string oct;
if (dec == 0) oct = "0";
while (dec > 0) {
    oct += static_cast<char>(dec % 8 + '0');  // 오류1 수정: + '0'
    dec /= 8;                                 // 오류2 수정: while 반복
}
reverse(oct.begin(), oct.end());              // 오류3 수정: 자릿수 뒤집기
cout << "변환된 8진수: " << oct << endl;

예를 들어 100을 입력하면 100=1×64+4×8+4 이므로 144가 출력됩니다.

100(10)=144(8)

👉 실습(C++)에서 확인하기

PDF