这个问题等同于求N!含有质因数2的个数,因为二进制最低位为0代表是偶数,可以被2整除,如果为1则代表是奇数,不能被2整除,其内部也不会包含质因数2,所以质因数2的个数就是二进制表示中最低位1后面的0个数。
由于N!中含有质因数2的个数,等于[N/2]+[N/4]+[N]/8......,道理和前一篇找阶乘N!最后有几个0的道理一样
#include <stdio.h>
int main()
{
int n;
printf("请输入阶乘n的值:");
scanf("%d",&n);
int res = 0;
while(n)
{
res += n/2;
n /= 2;
}
printf("阶乘n的二进制表示中最低位1的位置是%d\n",res);
return 0;
}
注意:位置从0开始