문제 - 2^k <= n 을 구하라
예시 - N을 256 입력시 k의 최대값 8이 나와야한다.

#include <stdio.h>
int main(){
int n;
int i;
int count=0;
scanf("%d", &n);
i = 1;

while(1){
i=i*2;
if(i>n){
break;
}
count++;
}
printf("값 %d \n", count);
return 0;
}

팁 - 2의 k승을 구하는 문제는 결국 i=i*2를 하면서 몇번했는지 카운트하는 것이다.
15를 입력하면 3이 나와야하고 16을 입력하면 4, 17을 입력하면 4가 나와야한다.
그림으로 보자

i n count
2 16 1
4 16 2
8 16 3
16 16 4

32 ------- n이 더 크거나 같아야하므로 여기서 종료 2의 4승까지 구해진다.

2 15 1
4 15 2
8 15 3

16 ------- n보다 누적된 i값 16이 더 크므로 종료한다. n이 15일땐 2의 3승까지 구한다.

블로그 이미지

ryancha9

https://blog.naver.com/7246lsy

,