c로
1. 상수는 0~255까지만
2. 함수 새로 선언 불가, 함수 호출 불가
3. 매크로 정의 불가
4. 사용 가능한 연산자 ! ~ & ^ | + << >> (=은 제한없음)
5. 제어문 사용불가 (if, for, while, goto등)
6. 총 연산 개수 40개 이하
같은 조건에서
int 형 변수를 입력받아 이진법 표현에서 1의 개수를 출력하래
제어문 없이 어떻게하라는거임;;
c로
1. 상수는 0~255까지만
2. 함수 새로 선언 불가, 함수 호출 불가
3. 매크로 정의 불가
4. 사용 가능한 연산자 ! ~ & ^ | + << >> (=은 제한없음)
5. 제어문 사용불가 (if, for, while, goto등)
6. 총 연산 개수 40개 이하
같은 조건에서
int 형 변수를 입력받아 이진법 표현에서 1의 개수를 출력하래
제어문 없이 어떻게하라는거임;;
쉬운거자느
unsigned count(unsigned n) { n = (n & 0x55555555) + ((n >> 1) & 0x55555555); n = (n & 0x33333333) + ((n >> 2) & 0x33333333); n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F);
n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF); return (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF); }
가능함
인티져를 그대로 쓰면 안대고 언사인드로 한번 비틀어야 >>할때 MSB확장 안일어나니까 그것만 신경쓰셈
근데ㅋㅋ 제어문만ㅋㅋ 안되면ㅋㅋ 재귀로ㅋㅋ 풀면ㅋㅋ 한줄로ㅋㅋ 끝나염ㅋㅋ
상수255까지만이라 0x555555같은거 못써
재귀는 못쓰지. 2로 나눠서 나머지 다 더하면 되겠네
그거만드는데 좀 쓰면 연산수충분하려나
함수호출 불가가 자기자신도 호출불가
아무튼 ㄱㅅㄱㅅ 아슬아슬하게 될듯
8번 나누고, 8번 나마지구하고, 8번 나마지 더하면 끝인거 아님?