본문 바로가기
알고리즘

[C] 백준 1373

by mokhwasomssi 2022. 1. 6.

자리수 구분의 용이성을 위해 2진수를 문자열로 받는다. 

문자열로 받으면 배열의 인덱스를 통해 자리수 구분이 가능하다. 

 

8진수를 구하기 위해서는 2진수를 3개씩 묶어야 한다. 

 

이 때 문제가 되는 경우는 3으로 나누어 떨어지지 않는 경우다. 

 

나머지가 1, 2인 조건에서 최상위 자리의 8진수 값을 출력하였고

이후에는 2진수를 8진수로 변환하는 반복문을 돌렸다.

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>

char bin[1000000]; 

int main()
{
	int len;
	int r; 
	int oct = 0;

	scanf("%s", bin);
	len = strlen(bin);
	r = len % 3;

	if (r == 1)
	{
		oct += (bin[0] - 48) * 1;
		printf("%d", oct);
	}
	else if (r == 2)
	{
		oct += (bin[0] - 48) * 2;
		oct += (bin[1] - 48) * 1;
		printf("%d", oct);
	}
	
	for (int i = r; i < len; i += 3)
	{
		oct = 0;

		oct += (bin[i] - 48) * 4;
		oct += (bin[i+1] - 48) * 2;
		oct += (bin[i+2] - 48) * 1;

		printf("%d", oct);
	}

	return 0;
}