자리수 구분의 용이성을 위해 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;
}