10진수를 2진수로 변환해서 출력하는 것이 목적이다. 배열을 활용한 풀이도 가능하지만 포인터와 동적할당을 이용해서 풀이하겠다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int dec, count = 0;
scanf("%d", &dec);
// 10진수 값을 담을 변수 선언 및 입력, 2진수 자릿수를 담을 변수 선언
char *bin = malloc(sizeof(char) * 100);
// char의 크기 * 100만큼 메모리 동적 할당
while (1)
{
bin[count] = dec % 2;
dec /= 2;
count++;
if (dec == 0)
break;
// 매 반복마다 dec을 2로 나눈 나머지를 bin의 count 인덱스 요소에 저장,
// dec은 dec을 2로 나눈 몫을 저장하고 count는 1씩 증가
// dec가 0이라면 반복 종료
}
for (int i = count - 1; i >= 0; i--)
{
printf("%d", *(bin+sizeof(char)*i));
} // bin의 요소들을 역순으로 출력
free(bin); // 동적 할당한 메모리 해제
}
먼저 10진수 값을 입력 받고, 2진수 자릿수를 카운트 해줄 변수 하나를 선언해줬다. 그리고 malloc으로 넉넉하게 char의 크기 * 100만큼 메모리를 확보하고 그 주소를 bin에 저장한다. while문 조건을 1로 줘 무한 루프를 돌리는데 매 반복마다 dec를 2로 나눈 나머지를 bin의 count 인덱스의 요소에 넣는다. 그리고 dec은 자기 자신을 2로 나눈 몫을 저장하고 자릿수를 담는 변수인 count는 +1해준다. 만약 dec가 0이된다면 더 이상 나눌 수 없다는 뜻(2진수가 다 만들어졌다는 뜻)이므로 반복을 종료한다.
2진수 변환과정을 거쳤을 때 bin이 가리키는 주소에는 변환된 2진수가 역순으로 저장돼 있기 때문에 역순으로 bin의 요소들을 출력한다. 마지막으로 free 함수로 동적으로 할당한 메모리를 해제해준다.
'Old (2021.01 ~ 2021.12) > Algorithm' 카테고리의 다른 글
CodeUp 1502 : 2차원 배열 채우기 2 (0) | 2021.03.07 |
---|---|
CodeUp 1098 : 설탕과자 뽑기 (0) | 2021.03.07 |
CodeUp 1810 : (포인터) 부분 문자열 (0) | 2021.03.07 |
CodeUp 1581 : swap 함수 만들기 (0) | 2021.03.07 |
CodeUp WriteUp With C Language (0) | 2021.02.27 |