ascode 1001 나는 차차를 싫어해!
문제 설명
숫자 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
도움
- 입력되는 데이터의 수가 정말로 100만개가 들어오므로 cout를 이용한 입출력을 할시 시간초과가 발생한다.
- 입출력 외의 라이브러리는 필요 없다. ex) math.h
- 값이 42억까지 들어오므로 unsigned int를 할 시 41억 ~ 82억 으로 체크할 때 숫자가 넘친다.
- 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;
}
}
댓글남기기