最近在看编程之美,对于上面几道题简单整理下来,便于以后查看
1.求二进制中1的个数
(1)根据二进制数的换算方法,一个数除以2,原来的数字减少一个0,如果结果有余数,则说明当前位置是1
(2)用二进制数与1,如果结果是1,表示最后一位是1,然后数字右移一位,循环操作
(3)V&(V-1)
2.阶乘问题
给定一个整数N,N的阶乘末尾有多少个0.
N!=2(X)*3(Y)*5(Z)*….
10=2*5
N=K*10(M) M之和X和Z有关,能被2整除的数出现的频率比能被5整除的数出现的频率高的多。
因此求Z
求N!二进制数的最低位1的位置。也就是N!含有质因数2的个数+1
二进制数除以2,若余数为0右移一位。