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的阶乘末尾有多少个零!急求程序!的主要内容,如果未能解决你的问题,请参考以下文章