不要被阶乘吓倒(2)

来源:互联网 发布:java实现图书管理系统 编辑:程序博客网 时间:2024/05/21 06:15
package com.demo;
/**
 * 求N!的二进制表示中最低位1的位置,例如:给定N = 3,N!= 6,那么N!的二进制表示(1 010)的最低位1在第1位
 * @author ying
 *
 */
public class Factorial2 {
/**
* 回想一下十进制和二进制的转换过程,就是拿十进制的数不断去除于2。
* 也就是说任意一个长度为m的二进制数N可以表示为N = b[1] + b[2] * 2 + b[3] * 22 + … + b[m] * 2(m-1),其中b [ i ]表示此二进制数第i位上的数字(1或0)。
* 所以,若最低位b[1]为1,则说明N为奇数;反之为偶数,将其除以2,即等于将整个二进制数向低位移一位。
* 最后问题可以转化为求N!中含有质因数2的个数
* @param n
* @return
*/
public String lowestOne(int n){
int ret = 0;
while(n!=0){
n>>=1;
ret+=n;
}
return "n!的二进制表示中最低位1在第"+ret+"位(位数从0开始)";
}
}
0 0