ascode 1001 나는 차차를 싫어해!

최대 1 분 소요

문제 설명

숫자 N이 입력이 되면은
2^a-1 < N <= 2^a
이 식이 참이 되는 a의 값을 구하자.

입력 설명

첫 번째 줄에는 TestCase가 들어온다. TestCase의 크기는 0 < TestCase < 1,000,000 이다.
두번째 줄에는 N이 입력이 되며 N의 숫자의 범위는 0 < N < ‭4,294,967,295‬ 이다.
그 이후로는 두번 째 줄의 반복이다.

출력 설명

a의 값을 출력한다.

입력 예시

3
3
4
7

출력 예시

2
2
3

도움

  1. 입력되는 데이터의 수가 정말로 100만개가 들어오므로 cout를 이용한 입출력을 할시 시간초과가 발생한다.
  2. 입출력 외의 라이브러리는 필요 없다. ex) math.h
  3. 값이 42억까지 들어오므로 unsigned int를 할 시 41억 ~ 82억 으로 체크할 때 숫자가 넘친다.
  4. C언어, C++ 이외의 언어로 작성할시 시간초과가 발생 할 것이다.

코드

#include <stdio.h>

int main() {
	unsigned long long a, b, c = 0, d = 1, e = 1;
	scanf("%llu", &a);
	for (int i = 0; i < a; i++)
	{
		scanf("%llu", &b);
		while (1)
		{
			d = 2 * d;
			e = 2 * e;
			c++;
			if (d / 2 < b && b <= e) {
				printf("%d\n", c);
				break;
			}
		}
		c = 0; d = 1, e = 1;
	}
}

댓글남기기