Flip the Bit(第二次組隊賽)
阿新 • • 發佈:2018-12-24
C. Flip the Bit
You are given a positive integer n. Your task is to build a number m by flipping the minimum number of bits in the binary representation of n such that m is less than n (m < n) and it is as maximal as possible. Can you?
Input
The first line contains an integer T (1 ≤ T ≤ 105) specifying the number of test cases.
Each test case consists of a single line containing one integer n (1 ≤ n ≤ 109), as described in the statement above.
Output
For each test case, print a single line containing the minimum number of bits you need to flip in the binary representation of n to build the number m.
Example
Input
2
5
10
Output
1
2
沒翻譯明白題意,弱是原罪
題意:給定一個數n,問要翻轉多少n的二進位制數多少次才能使變成小於n的最大數(0變成1,1變成0),記錄翻轉幾次
思路:找到從右往左第一個1翻轉成0,1右邊的0全部翻轉成1。
ac程式碼:
#include<cstdio> #include <cstring> #include <cmath> #include<algorithm> #include <stdlib.h> using namespace std; int main() { long long int T,i,n,ans=1; scanf("%lld",&T); while(T--) { ans=1; scanf("%lld",&n); while(1) { if(n%2==1) break; n/=2; ans++; } printf("%lld\n",ans); } return 0; }