#include<bits/stdc++.h> using namespace std; int main(){ long long n; long long ant=0; while(scanf("%lld",&n)!=EOF){ ant=0; for(int i=1;i<=64;i++){
if(n&1){ ant++; } n=n>>1; } cout<<ant<<endl; } return 0; } 这题主要用到位运算&的作用是取最低位进行与运算>>1将二进制数向右移动一位 问题出在ant的置零每个数开始前都要对ant重置 注意多个输入一般结尾要换行