给定一个整数N,求N!末尾有多少个0?N!的二进制表示中最低1的位置?

来源:互联网 发布:淘宝万斯正品店 编辑:程序博客网 时间:2024/04/28 10:53

1.末尾为0,说明肯定有2*5的因子,所以只要统计N*(N-1)*...1中因子2和5的个数。显然在这里因子2的个数是多于因子5的个数,所以只要统计有多少个因子5就行了。

int Count(int n){int sum=0;for(int i=n;i>1;i--){int k=i;while(k%5==0){    sum++;k=k/5;}}return sum;}
下面这个循环更简洁计算整数N!中有多少个5.

int Count(int N){int sum=0;while(N){sum+=N/5;N=N/5;}return sum;}
2.求N!的二进制表示中最低位1的位置,其实就是求N!中有多个因子2.
因此。类似上面的循环:

int Count(int N){int sum=0;while(N){sum+=N/2; N=N/2; //或者N=N>>1;}return sum;}
拓展:给定整数n,判断它是不是2的方幂。

如果n是2的方幂,则n中肯定只有一个“1”,从而可以用n&(n-1)判断是否为0,来确定。


0 0
原创粉丝点击