剑指offer面试题10

一个数二进制中一的个数


常规解法




#include



int count_one_bits(unsigned int value)
{

int a[100];

int i=0,num=1,m=0;

m=value;

for(i=0; m!=0; i++)  

    {   

          a[i]=m%2;  
          m=m/2;
  num++;

    }

for(i=0; i

{

if(a[i]==1)

m++;

}

return m;

}



int main()
{
int a=0;
printf("输入一个数\n");
scanf("%d",&a);
printf("%d\n",count_one_bits(a));

system("pause");

return 0;
}


这个解法只能求无符号数和正数二进制中一的个数无法求出负数二进制中一的个数


用位运算求二进制数中一的个数




#include


int count_one_bit(int value)
{

int i=0,n=vaule,count=0;


for(i=0; i<32; i++)

{

 if(n&1==1)
  {
  count++;
  }
  n=n>>1;

}

return count;

}




int main()
{

int n=0;

scanf("%d",&n);

printf("%d",count_one_bit(n));


return 0;

}


此解法必须循环32次


下面的算法为最优算法




int count_one_bit(int value)
{

int count=0;

while (value)

{

value=value&(value-1);

count++;

}

return count;

}




int main()
{

int n=0;

scanf("%d",&n);

printf("%d",count_one_bit(n));

return 0;

}

你可能感兴趣的:(C语言)