문제

태영이의 취미는 2의 제곱수를 계산하는 것이다.

태영이는 2^64 = 18,446,744,073,709,551,616 이라는 것을 알고 있고 직접 20부터 2씩 곱해서 264을 구할 것이다.

하지만 태영이는 2씩 곱하는 와중에 1을 빼버리는 실수를 딱 한 번 해버리고 말았다. (실수는 단 한 번만 하며, 그 후에는 2로 곱하는 계산을 정확하게 수행한다.)

예를 들어, 2^1 = 2로 계산을 잘 하다가 2^2 = 3으로 계산해버리는 어이없는 실수를 해버리는 것이다.

그렇게 된다면 2^3 = 6 , 2^4 = 12 ... 로 계산하여 점점 오차가 커진다.

태영이가 구한 2^64인 N이 주어졌을 때, 태영이가 처음으로 실수한 구간을 찾아주자.

입력

양의 정수 N이 주어진다.

N은 태영이가 2^64를 계산했을 때 나올 수 있는 수이다.

출력

태영이가 처음으로 실수한 구간을 찾아주자.

2K = 2K-1로 계산해버렸을 때의 K를 출력하면 된다.

제한

  • 2 ≤ N ≤ 18,446,744,073,709,551,615 = 2^64 - 1

예제 입력 1

18446744073709551615

예제 출력 1

64

2^63 = 9,223,372,036,854,775,808 까지는 계산을 잘 하다가

2^64를 2^64-1인 18,446,744,073,709,551,615로 계산을 잘못해버렸다. 


더보기

Solution

#include<stdio.h>

int main(void)
{
	unsigned long long int N;
	int K=64;

	scanf("%llu", &N);

	while(N%2==0)
	{
		N/=2;
		K--;
	}

	printf("%d\n", K);
	return 0;
}
728x90

+ Recent posts