100的阶乘末尾有多少个零!急求程序!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了100的阶乘末尾有多少个零!急求程序!相关的知识,希望对你有一定的参考价值。

速度,准确,跪谢

// 100!的尾数有多少个零?
//?
//*问题分析与算法设计  可以设想:先求出100!的值,然后数一下末尾有多少个零。事实上,与上题一样,由于计算机所能表示的整
//数范围有限,这是不可能的。   为了解决这个问题,必须首先从数学上分析在100!结果值的末尾产生零的条件。不难看出:一个整
//数若含有一个因子5,则必然会在求100!时产生一个零。因此问题转化为求1到100这100个整数中包含了多少个因子5。若整数N能被25整
//除,则N包含2个因子5;若整数N能被5整除,则N包含1个因子5。*程序说明与注释

#include<stdio.h>
int main()

int a,count =0;
for(a=5;a<=100;a+=5) //循环从5开始,以5的倍数为步长,考察整数
++count;
//若为5的倍数,计数器加1
if(!(a%25))
++count; //若为25的倍数,计数器再加1

printf("The number of 0 in the end of 100! is: %d.\n",count); //打印结果return 0;
参考技术A #include<iostream.h>
void main()

double n=1.0;
for(int i=1;i<=100;i++)
n*=i;
cout<<n<<endl;


其实每乘以一个尾数是5和0的数,都会加一个零,10的阶乘是2个0,15是3个0,20是4个0,依此类推,你自己算算。
参考技术B #include <stdio.h>
#include <string.h>
typedef struct num

int data[10000];
int len;
NUM;

void jc(NUM* sj, int n)

int i = 0, j = 0, temp = 0, inc = 0;
int len = 0;

memset(sj, 0, sizeof(NUM));
sj->data[0] = 1;

for (i=1;i<=n;i++)

for (j=0;j<=len;j++)

temp = sj->data[j]*i + inc;
sj->data[j] = temp%100000;
inc = temp/100000;


if (inc)
len++, sj->data[j] = inc, inc = 0;

sj->len = len;


/*算法1*/
int countzero_1(NUM*sj)

int i = 0, k ,n;

while (sj->data[i]==0)
i++;
n = sj->data[i];
k = 0;
while (n%10==0)
n/=10,k++;
return i * 5 + k;


/*算法2*/
int countzero_2(int st,int dt)

int count=0 ;
int i ;
for(i=st;i<=dt;++i)

int temp=i ;
while(temp%5==0)

++count ;
temp/=5 ;


return count ;


int main()

NUM rst;

jc(&rst,100);
printf("%d\n", countzero_1(&rst));
printf("%d\n", countzero_2(1,100));

return 0;
参考技术C #include
<stdio.h>
int
main()

double
i,sum=1;
for(i=1;i<=100;i++)

sum=sum*i;

printf("%e",sum);
scanf("%d");

结果是9.332622e+157
参考技术D #include<stdio.h>
main()

long double i,m=1;
for(i=2;i<=100;i++)

m=m*i;

printf("%e\n",m);

getch();


结果是:9.33262e+157

LeetCode Factorial Trailing Zeroes

LeetCode解题之Factorial Trailing Zeroes


原题

求n的阶乘末尾有几个零。

注意点:

  • 将时间复杂度控制为log(n)

例子:

输入: n = 5

输出: 1

解题思路

通过因数分解知道,10是由2和5相乘得到的,而在n的阶乘中,因子2的数目总是比5多的,所以最终末尾有几个零取决于其中有几个5。1到n中能够整除5的数中有一个5,能整除25的数有2个5(且其中一个在整除5中已经计算过)…所以只要将n不断除以5后的结果相加,就可以得到因子中所有5的数目,也就得到了最终末尾零的数目。

AC源码

class Solution(object):
    def trailingZeroes(self, n):
        """
        :type n: int
        :rtype: int
        """
        count = 0
        while n:
            n //= 5
            count += n
        return count


if __name__ == "__main__":
    assert Solution().trailingZeroes(25) == 6

欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源码。

以上是关于100的阶乘末尾有多少个零!急求程序!的主要内容,如果未能解决你的问题,请参考以下文章

请问计算n的阶乘末尾有多少个0

LeetCode 793 阶乘函数后K个零

计算n的阶乘末尾有多少个0

求N的阶乘末尾有几个0

N的阶乘末尾有多少个0

求一个n!中尾数有多少个零