뭐라도 쓰겠지
25.03.04 / 재귀함수를 이용한 2진법 변환기 본문
#include <stdio.h>
void EasyBinary(int n) {
if (n > 1) EasyBinary(n / 2);
printf("%d", n % 2);
}
int main(void) {
int num;
printf("10진수 : ");
scanf_s("%d", &num);
printf("2진수 : ");
EasyBinary(num);
return 0;
}
-25.03.05 수정-
챗지피티한테 원리와 반복문으로 바꾸는 법을 물어봤다.
설명
EasyBinary(int n) 함수는 재귀 호출을 사용하여 정수 n을 이진수(Binary)로 변환하여 출력하는 함수야.
어떻게 동작하는지 살펴보자:
- 재귀 호출:
- n이 1보다 크면 n / 2를 다시 EasyBinary() 함수에 전달하여 호출해.
- 이 과정을 반복하면 결국 n이 1 이하가 될 때까지 계속 n / 2를 계산하며 호출하게 돼.
- 출력:
- 가장 작은 n부터 출력하기 때문에 큰 자리 숫자가 나중에 출력돼서 정상적인 이진수 순서가 유지돼.
- 예를 들어, n = 13이면 호출 과정이 이렇게 돼:
EasyBinary(13)
├─ EasyBinary(6)
│ ├─ EasyBinary(3)
│ │ ├─ EasyBinary(1)
│ │ │ └─ printf("1") // 1의 자리
│ │ └─ printf("1") // 3의 자리
│ └─ printf("0") // 6의 자리
└─ printf("1") // 13의 자리
반복문으로 바꾸기
재귀를 반복문으로 바꾸려면 스택(stack) 또는 배열을 이용해서 값을 저장한 후 거꾸로 출력하면 돼.
#include <stdio.h>
void EasyBinaryLoop(int n) {
int binary[32]; // 최대 32비트까지 저장 가능 (int 범위 고려)
int index = 0; // 배열 인덱스
// n이 0이면 바로 0 출력
if (n == 0) {
printf("0");
return;
}
// 2진수 변환 과정
while (n > 0) {
binary[index++] = n % 2; // 2로 나눈 나머지 저장
n /= 2; // n을 2로 나눠서 업데이트
}
// 저장된 값을 거꾸로 출력
for (int i = index - 1; i >= 0; i--) {
printf("%d", binary[i]);
}
}
int main() {
int num = 13;
EasyBinaryLoop(num);
return 0;
}'프로그래밍 > C' 카테고리의 다른 글
| 25.03.07-25.03.11 / 중첩 반복문을 사용한 피라미드 (0) | 2025.03.07 |
|---|---|
| 25.03.06 / 비트 플래그를 이용한 퀘스트 클리어 여부 확인 (0) | 2025.03.06 |
| 25.03.06 / 비트 연산자를 이용한 2진법 출력 (0) | 2025.03.06 |
| 25.03.04 / Hello World 뜯어보기 (0) | 2025.03.04 |
| 25.02.28 / Hello World! (0) | 2025.02.28 |