1.统计二进制1的个数
2.统计十进制1的个数
3.统计n!末尾0的个数
//1.统计二进制1的个数
int number_2_1(int n)
{
int count = 0;
while (n)
{
n = (n-1) & n;
++count;
}
return count;
}
int main()
{
int count = number_2_1(9);
printf("二进制中1的个数为:%d\n",count);
return 0;
}
//2.统计十进制1的个数
int number_10_1(int n)
{
int count = 0;
while(n)
{
if(n%10==1)
{
++count;
}
n/=10;
}
return count;
}
int main()
{
int count = number_10_1(123111);
printf("十进制中1的个数为:%d\n",count);
return 0;
}
//3.统计n!末尾0的个数(统计5的个数,注意25等有很多5的数字)
int number_0(int n)
{
int count = 0;
for(int i = 1;i<= n;i++)
{
int tmp = i;
for(int j = 1;j<=tmp;j++)
{
if(tmp%5 == 0)
{
++count;
tmp = tmp /5;
if(j==5)//当所求的数大于5的5次方之后会少算很多5
{
j==1;
}
}
else//当tmp不是5的倍数就直接退出不用再让j持续增长到比tmp大时在退出
{
break;
}
}
}
return count ;
}
int main()
{
int count = number_0(25);
printf("尾部连续零的个数为%ld个\n",count);
return 0;
}