BoP——2.2阶乘中的0个数和二进制最后一个1的位置
2017-10-14 本文已影响0人
Myth52125
这个题忘记在那里遇到过了。
题目一
方法一
先求出这个阶乘,然后在去计算尾部有多少个0就行。
但是,面试里肯定不会提。
方法二
数学的方法
所有的数,能分解出多少个5,最终就会有多少个0。
考察每一个数
int counts1(int v)
{
int counts = 0;
for(int i = 1;i<=v;i++)
{
int j = i;
while(j%5 == 0)
{
counts++;
j/=5;
}
}
return counts;
}
方法三
这是一种数学的思想,先求出含有至少一个5的因数的数,在求至少含有2个5因数的个数。
int counts2(int v)
{
int counts=0;
while(v)
{
counts+=v/5;
v/=5;
}
return counts;
}
题目二
最后一个是1,的位数。
和上一个题一样,多一个5因数,结尾就多一个0。
而这个题中,多一个2因数,二进制形式中就会多一个0。
和上一题的方法二同理
int counts3(int v)
{
int counts =0;
while(v)
{
//这里其实就是相当于v/2
v>>=1;
counts+=v;
}
}