问题1:给定一个整数N,那么N的阶乘N!末尾有多少个0呢?
问题2:求N!的二进制表示中最低位1的位置。
问题1源代码:
#include<iostream>
using namespace std;
int GetNumber1_Zeros(int N)
{
int ret = 0;
for(int i = 1;i <= N;i++)
{
int j = i;
while(j % 5 == 0)
{
ret++;
j /= 5;
}
}
return ret;
}
int GetNumber2_Zeros(int N)
{
int ret = 0;
while(N)
{
ret += N / 5;
N /= 5;
}
return ret;
}
问题2源代码:
#include<iostream>
using namespace std;
int lowestOne1(int N)
{
int Ret = 0;
while(N)
{
N >>= 1;
Ret += N;
}
return Ret;
}
int lowestOne2(int N)
{
int Ret = 0;
int v = N;
while(v)
{
if(v % 2 == 1 )
Ret++;
v = v / 2;
}
return (N - Ret);
}