Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 프로그램으로 10진수를 8진수로 변환하기

컴퓨터 시스템에서 8진수는 밑이 8인 기수법으로 표현되고, 10진수는 밑이 10인 기수법으로 표현됩니다. 즉, 8진수는 각 자리가 0부터 7까지의 숫자만 사용하며, 10진수는 0부터 9까지의 숫자를 사용합니다.

아래 표는 대표적인 10진수와 이에 해당하는 8진수 값의 예시입니다.

10진수8진수
810
70106
2531
77

이제 10진수를 8진수로 변환하는 C++ 프로그램을 살펴보겠습니다.

예제 코드

#include <iostream>
using namespace std;
void DecimalToOctal(int decimalNum) {
    int octalNum = 0, placeValue = 1;
    int dNo = decimalNum;
    while (decimalNum != 0) {
        octalNum += (decimalNum % 8) * placeValue;
        decimalNum /= 8;
        placeValue *= 10;
    }
    cout<<"Octal form of decimal number "<<dNo<<" is "<<octalNum<<endl;
}
int main() {
    DecimalToOctal(70);
    return 0;
}

실행 결과

Octal form of decimal number 70 is 106

코드 동작 원리

위 프로그램에서 DecimalToOctal() 함수는 10진수를 8진수로 변환하는 역할을 합니다. 함수 내부에서 먼저 변수 octalNum은 0으로 초기화되고, 변수 placeValue는 숫자 내 각 자릿수의 위치(1, 10, 100 등)를 나타냅니다. 최종적인 8진수 값은 while 루프를 통해 계산됩니다.

while 루프가 한 번 반복될 때마다 다음과 같은 작업이 수행됩니다.

  • decimalNum % 8: 10진수를 8로 나눈 나머지(현재 자리의 8진수 숫자)를 구합니다.
  • 나머지에 placeValue를 곱하여 기존의 octalNum 값에 더합니다.
  • decimalNum /= 8: 10진수를 8로 나눈 몫을 다시 저장해 다음 자리를 계산할 준비를 합니다.
  • placeValue *= 10: 자릿값을 10배씩 늘려 왼쪽 자리로 이동합니다.

이 과정을 보여주는 핵심 코드 조각은 다음과 같습니다.

while (decimalNum != 0) {
    octalNum += (decimalNum % 8) * placeValue;
    decimalNum /= 8;
    placeValue *= 10;
}

결과 출력

while 루프가 종료되어 8진수 값인 octalNum이 구해지면, 이를 화면에 출력합니다. 출력 부분의 코드는 아래와 같습니다.

cout<<"Octal form of decimal number "<<dNo<<" is "<<octalNum<<endl;

마지막으로 main() 함수에는 필요한 값을 인자로 전달하며 DecimalToOctal() 함수를 호출하는 코드만 포함되어 있습니다.

DecimalToOctal(70);

이처럼 나눗셈과 나머지 연산을 반복적으로 활용하면 별도의 라이브러리 없이도 손쉽게 10진수를 8진수로 변환할 수 있습니다. 같은 원리를 응용하면 2진수나 16진수 변환 프로그램도 쉽게 작성할 수 있습니다.