1.问题
磊哥为测验小凡的位运算知识,给小凡n个long long 型整数,
磊哥问小凡其中有多少个2次幂数?
输入
第一行输入整数n.
接下来n个long long 型整数。
输出
输出其中值为2次幂的数的个数。
提示
100% 的数据满足: 1≤ n ≤ 6 ,000,000; n个正整数均保证是long long 型正整数。
- 样例输入:
4
1 2 4 8 - 样例输出:
4
2.分析
由于数据过于庞大,不应用cin,否则时间会超限,想到这一点后就不难了解到,这个题只需要判断一个数是不是2的幂数,要用到位运算
例如输入一个数N,若N&(N-1)==0,则是,若不为0则不是
3.代码实现
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll k;
int main()
{
int n,i;
cin>>n;
ll sum=0;
for(i=0;i<n;i++)
{scanf("%lld",&k);
if((k&(k-1))==0)sum++;
}
cout<<sum<<endl;
return 0;
}