统计N!结果中(十进制)末尾有多少个0.
求末尾0的数量即是统计数因子5的数量。
int numCountZero(int N) {
if (N < 1) return -1;
int num = N;
int count = 0;
while (num != 0) {
num /= 5;
count += num;
}
return count;
}
N!的结果用二进制表示,求最低位的那个1的位置。
Solution I : 参考google s2中采用bruijn序列的做法,即先(-N!)&(N!)&bruijn序列,参见bruijn Solution II: 如上题,数学观察得出的规律,这里是找因子2的数量。
int numRightOne(int num) {
if (num < 1) return -1;
int count = 0;
while (num != 0) {
num >>= 1;
count += num;
}
return count;
}