0的个数(极速版)
时间限制:700 ms | 内存限制:65535 KB
-
描述
-
要在半天内出好题目,没时间了,快用最快速度的告诉我所有整数二进制末尾0的个数的和。
只有一组大数据。
Hint:建议使用高效输入方式
while(~(c=getchar()))
if(c>='0'&&c<='9')x=x*10+c-'0';
-
输入
- 40,000,000个正整数(0≤每个整数≤2^64-1),每个整数后面都有一个空格 输出
- 只输出一个整数,为所有整数二进制末尾0的个数的和 样例输入
-
8 0 17
样例输出
-
67
来源
- 高效代码改编 上传者
分析:哎,这南阳理工oj的网站太卡了,老是出现崩溃状态,打不开的情况。无力吐槽·····
一开始,老是不懂67咋来的??后来看见数据范围明白,刚好多了64,当输入为0时,则是64个0;
CODE:
#include<iostream> #include<cstdio> using namespace std; int main() { long long x=0,cnt=0; char c; while(~(c=getchar())) { if(c>='0'&&c<='9') x=x*10+c-'0'; else if(x==0) cnt+=64; else{ while(!(x&1)){ cnt++; x>>=1; } x=0; } } cout<<cnt<<endl; return 0; }