문제
https://www.acmicpc.net/problem/19946
걸린 시간
-
풀이
C++
#include <bits/stdc++.h>
#define INF 1e9
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
ull n;
cin >> n;
int k = 1;
while(k <= 64){
ull mistake = 1; // 2^0
for(int i = 1; i <= k; i++)
mistake *= 2;
mistake -= 1;
for(int i = k+1; i <= 64; i++)
mistake *= 2;
if(mistake == n)
break;
k++;
}
cout << k;
return 0;
}
unsigned long long 자료형을 사용해야하고, pow 함수는 부동소수점 오차 문제가 발생하기 때문에 반복문으로 2씩 일일이 곱해주어야 올바르게 계산된다.
참고
'Baekjoon' 카테고리의 다른 글
Baekjoon 13417번 카드 문자열 (0) | 2020.09.27 |
---|---|
Baekjoon 20001 고무오리 디버깅 (0) | 2020.09.27 |
Baekjoon 1022번 소용돌이 예쁘게 출력하기 (0) | 2020.09.24 |
Baekjoon 2225번 합분해 (0) | 2020.09.23 |
Baekjoon 10800번 컬러볼 (0) | 2020.09.23 |
댓글