A. And Then There Were K
time limit per test:1 second
memory limit per test:256 megabytes
input:standard input
output:standard output
Given an integer n, find the maximum value of integer k such that the following condition holds:
n & (n−1) & (n−2) & (n−3) & ... (k) = 0
where & denotes the bitwise AND operation.
Input
The first line contains a single integer t (1≤t≤3⋅104). Then t test cases follow.
The first line of each test case contains a single integer n (1≤n≤109).
Output
For each test case, output a single integer — the required integer k.
Example
input
3
2
5
17
output
1
3
15
Note
In the first testcase, the maximum value for which the continuous & operation gives 0 value, is 1.
In the second testcase, the maximum value for which the continuous & operation gives 0 value, is 3. No value greater then 3, say for example 4, will give the & sum 0.
5&4≠0,
5&4&3=0.
Hence, 3 is the answer.
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <iomanip>
#include <map>
#include <set>
#include <algorithm>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
long long n;
cin >> n;
int i=1;
for (;;i++) {
n = n / 2;
if (n == 0) {
break;
}
}
i--;
long long sum = 0;
for (int j = 0; j < i; j++) {
sum = sum + pow(2, j);
}
cout << sum << endl;
}
}
题意:找出一个数往下与到某数使结果为0
思路:暴力会超时,后来一想就是求二进制位数,然后求位数少一位且每位为1的数