C#에서 10진수를 8진수로 변환하기
C#에서 10진수(decimal) 값을 8진수(octal)로 변환하려면 while 반복문을 활용하는 것이 가장 일반적인 방법입니다. 핵심 원리는 간단합니다. 10진수 값을 8로 나눈 나머지를 배열에 차례대로 저장하고, 몫이 0이 될 때까지 이 과정을 반복하는 것입니다.
변환 알고리즘의 원리
먼저 10진수 값을 8로 나눈 나머지(모듈로 연산)를 8진수 저장용 배열에 담습니다.
while (dec != 0) {
oct[i] = dec % 8;
dec = dec / 8;
i++;
}나머지를 저장한 후에는 해당 숫자를 8로 나누어 다음 자릿수를 계산합니다. 이 과정은 값이 0이 될 때까지 계속됩니다.
전체 예제 코드
아래는 10진수 18을 8진수로 변환하는 완전한 C# 코드입니다. 실행 결과로 22가 출력됩니다.
using System;
namespace Demo {
class Program {
static void Main(string[] args) {
int[] oct = new int[30];
// 10진수 값
int dec = 18;
int i = 0;
while (dec != 0) {
oct[i] = dec % 8; // 8로 나눈 나머지를 배열에 저장
dec = dec / 8; // 값을 8로 나눔
i++;
}
// 역순으로 출력 (마지막에 구한 자릿수가 가장 높은 자리)
for (int j = i - 1; j >= 0; j--)
Console.Write(oct[j]);
Console.ReadKey();
}
}
}코드 설명
1. 나머지 저장: dec % 8 연산으로 현재 자릿수의 8진수 값을 구해 배열에 저장합니다.
2. 값 갱신: dec / 8 연산으로 원래 숫자를 줄여가며 다음 자릿수를 준비합니다.
3. 역순 출력: 나머지는 낮은 자릿수부터 저장되므로, 배열을 뒤에서부터 출력해야 올바른 8진수 결과를 얻을 수 있습니다.
예를 들어 10진수 18의 경우, 18 ÷ 8의 나머지는 2이고 몫은 2입니다. 다시 2 ÷ 8의 나머지는 2이고 몫은 0이 되어 반복이 종료됩니다. 따라서 결과는 22(8진수)가 됩니다.