美文网首页编程之美
BoP——2.2阶乘中的0个数和二进制最后一个1的位置

BoP——2.2阶乘中的0个数和二进制最后一个1的位置

作者: Myth52125 | 来源:发表于2017-10-14 16:22 被阅读0次

    这个题忘记在那里遇到过了。

    题目一

    方法一

    先求出这个阶乘,然后在去计算尾部有多少个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;
        }
    }
    

    相关文章

      网友评论

        本文标题:BoP——2.2阶乘中的0个数和二进制最后一个1的位置

        本文链接:https://www.haomeiwen.com/subject/wytfuxtx.html