페이지

1212번: 8진수 2진수

https://www.acmicpc.net/problem/1212


$O(l)$

각 자리 8진수의 수는 3자리의 2진수의 수로 바꿀 수 있다.


#include<cstdio>
int x, c;
int main() {
    while (~scanf("%1o", &x)) for (int i = 4; i; i /= 2) if (x / i & 1 | c)printf("%d", x / i & 1), c = 1;
    return 0;
}

댓글 4개 :

  1. 안녕하세요,소스 공개를 해주신 덕분에
    BOJ 하면서 운영자님 블로그를 들러 참고를 하곤 합니다.
    혹시 if (x / i & 1 | c)printf("%d", x / i & 1)
    이 부분 설명해주실수 있을까요?

    답글삭제
    답글
    1. x/i&1: x를 8진법으로 나타냈을 때 어떤 자리 수
      c: 세 자리마다 잘라서 출력할 때, 앞 부분에 0이 있으면 출력되지 않을 수 있으므로 1이 나온 이후부터는 모든 자리 출력

      삭제
    2. 비트연산자가 이렇게도 쓰이네요! 빠르다는 건 익히 알고있지만, 이렇게 생각하기는 초보자인 입장에선 쉽지 않은 것 같네요ㅠㅠ 아무튼 설명감사드립니다!!

      삭제
    3. 가독성 해치며 쓰는거라 ㅎㅎ
      길고 직관적인 소스도 괜찮습니다.

      삭제