《编程之美》——不要被阶乘吓倒

问题:

  1. 给定一个整数N,求N!末尾的0的个数。
  2. 求N!的二进制表示中最低位1的位置。

分析与解法:

—— 问题1

《编程之美》——不要被阶乘吓倒_第1张图片

【解法一】
计算因式分解中5的指数,再求和。

代码:

int zeroNum(int N)
{
    int num = 0;
    for(int i = 0; i <= N; i++)
    {
        int j = i;
        while(j % 5 == 0)
        {
            num++;
            j =/ 5;
        }
    }
    return num;
}

【解法二】
《编程之美》——不要被阶乘吓倒_第2张图片

代码:

int zeroNum(int N)
{
    int num = 0;
    while(N)
    {
        N /= 5;
        num += N;
    } 
    return num;
}

——问题2

《编程之美》——不要被阶乘吓倒_第3张图片

【解法一】
这里写图片描述

代码:

int onePos(int N)
{
    int num = 0;
    while(N)
    {
        N >> 1;
        num += N;
    } 
    return num + 1;
}

【解法二】
《编程之美》——不要被阶乘吓倒_第4张图片

你可能感兴趣的:(《编程之美》——不要被阶乘吓倒)