print_binary_loop 함수를 구현해봤습니다.
#define CRTSECURE_NO_WARNINGS
#include <stdio.h>
/*
10
10 / 2 = 5, remainder = 0
5 / 2 = 2, reminder = 1
2 / 2 = 1, reminder = 0
1 / 2 = 0, reminder = 1
*/
void print_binary(unsigned long n);
void print_binary_loop(unsigned long n);
int main()
{
unsigned long num = 10;
print_binary_loop(num);
printf("\n");
print_binary(num);
printf("\n");
return 0;
}
void print_binary(unsigned long n)
{
if (n > 0)
{
print_binary(n / 2);
printf("%d", n % 2);
}
}
void print_binary_loop(unsigned long n)
{
int i = 0, remain, v;
for (int ans = n; ans > 0; ans = ans / 2)
{
//printf("ans : %d\n", ans);
i++;
}
for (int j = 0; j < i; j++)
{
v = n;
for (int k = i; k > j; k--)
{
remain = v % 2;
v = v / 2;
}
printf("%d", remain);
}
}
답변 2
1
안녕하세요? 질문&답변 도우미 durams입니다.
print_binary_loop
강의 영상에서 나온 버전은 실제 순서와는 반대로 숫자가 출력된다는 작은 문제가 있었는데요, 이를 해결하려 시도하신 것으로 보입니다. 맨 앞 자리(MSB)부터 구하기 위해 여러번의 연산을 하고 있는데, 이 방식은 입력 정수 n의 길이가 길어질수록 나머지 연산과 나누기 연산의 횟수가 크게 증가하게 된다는 단점이 있겠죠.
강의 마지막에 소개된 것처럼 이후에 배우게 되실 배열을 이용하신다면 이 단점을 해결하실 수 있습니다.
print_binary
강의 영상의 버전은 n >= 2일 때만 재귀를 진행하지만, 질문자님의 코드는 n > 0일 때도 재귀 호출을 진행합니다. 인자 n이 0일 때에는 아무런 작업도 하지 않으니 의미없는 호출이라고 볼 수 있겠네요. 강의의 코드는 그러한 의미없는 호출을 없앤 버전이라고 보시면 될 것 같습니다. 물론 사용자 시점에서 출력되는 결과는 동일합니다.
0
안녕하세요, 인프런 AI 인턴입니다. wjdwn535님.
주어진 C 코드의 print_binary 함수는 재귀적으로 숫자를 2진수로 변환하여 출력합니다. 반면, print_binary_loop 함수는 반복문을 활용하여 동일한 작업을 수행하려 합니다.
하지만 현재 print_binary_loop 함수에서는 일부 로직이 제대로 구현되지 않아 출력이 예상과 다를 수 있습니다. 여기서는 기본적으로 숫자의 각 자리수의 이진수를 구하고 출력하는 방식으로 작동해야 합니다.
print_binary함수는 재귀를 사용하여 역순으로 나머지를 출력함으로써 숫자를 2진수로 바꾸는 방법을 채택하고 있습니다.print_binary_loop함수 문제점 및 개선:- 주어진 반복문은 숫자의 각 자리 이진 숫자를 계산하려는 의도로 보입니다. 하지만 처음부터 나누는 작업을 통해 각 자리가 역순으로 출력되지 않습니다.
- 이를 해결하려면 숫자를 오른쪽에서 왼쪽으로 읽어오면서 각각의 비트를 출력하는 방향으로 수정해야 합니다.
- 주어진 반복문은 숫자의 각 자리 이진 숫자를 계산하려는 의도로 보입니다. 하지만 처음부터 나누는 작업을 통해 각 자리가 역순으로 출력되지 않습니다.
관련 질문이 다뤄진 유사한 답변을 참고하면 더 나은 이해에 도움이 될 것입니다:
- 와일문 대괄호 질문합니다 - 와일문을 활용하여 반복문 내 조건이나 동작을 이해하는 방식에 대한 설명.
- a++ 설명법 - 후위 연산자의 사용 방식 및 그 이외 예제.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
Export template 안됨
1
49
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
73
3
main 함수에서 왜 int만 선언이 되는걸까요
1
63
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
62
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
60
1
프로토타입과 함수간의 인자 불일치
1
81
2
12.12 헤더 관련 질문
1
65
2
Visual Studio Community 2026 사용 문의
1
152
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
65
2
getchar(), putchar()
1
97
3
강의자리ㅛ
1
87
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
120
2
소스파일안에 여러 파일
1
81
2
F5와 F7의 차이
1
83
2
c = TWO * (a+b); 에서 a와 b는?
1
64
2
; 세미콜론을 붙이는 기준에 문의
1
73
1
Step over 기능 문의
1
57
2
2.6 강의 따옴표 출력 규칙 문의
1
82
2
int main 함수 관련 오류 문의
1
72
2
13.4 words[0]
0
65
2
11.7 함수를 구현해 봤습니다.
1
66
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
69
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
58
2
11.6 fit_str함수를 구현해 봤습니다.
1
56
2





