1*2*3*…*99运算结果的末尾有多少个0?

2025-02-01 03:58:39
推荐回答(5个)
回答1:

末尾0的个数即约数10的个数,10=2*5,显然约数5的个数远小于2的个数

因此末尾0的个数取决于上式中约数5的个数

99整除5=19, 因此共1+2+3+。。。+19共190个零

回答2:

上面 小毛哥哈哈的思路是对的但是结果错了 应该改为如下
因为0只有因数2*5才能得到,1~99的因数分解能得到很多个2,所以关键看有多少个5,1~99一共有“19”个5的倍数,再加上25是5的平方(还应该加上50,75这两个),又多了3个5,所以一共可以分解出22个5,所以末尾应该有22个0。

回答3:

因为0只有因数2*5才能得到,1~99的因数分解能得到很多个2,所以关键看有多少个5,1~99一共有20个5的倍数,再加上25是5的平方,又多了一个5,所以一共可以分解出21个5,所以末尾应该有21个0。

回答4:

126个0
9.3326215443944152681699238856267E+157

回答5:

结果如果用十进制来表示是一个156位的数,有22个0.
给个你程序,在VC里运行一下就有知道了,能算2000以内的阶乘
#include "stdafx.h"
#include
using namespace std;

void factory();//函数声明
int N;
int main(int argc, char* argv[])
{
cout<<"请输入N:";
cin>>N;
factory();

return 0;
}

const int A=10000,B=1000000;
//计算数组有多少个有效数(在数组前,非零的数)
int count(int a[])
{
int i=A-1;
while(!a[i]) i--;
return (i+1);
}

//小数num乘大数a[]
void mult(int a[],int num)
{
int i,j,k;
int b[A]={0},c[A]={0};
k=count(a);
//
for(i=0;i {
j=a[i]*num;
b[i]=j%B;
if(j>=B) c[i+1]=j/B;
}
k++;
for(i=0;i {
a[i]=b[i]+c[i];
if(a[i]>=B)
{
a[i+1]++;
a[i]-=B;
}
}
}

void factory()
{
int a[A]={1};
int i,k,j=1;

//从2到N,依次乘大数a[A]
for(i=2;i<=N;i++)
mult(a,i);

k=count(a);

//计算大数的位数
i=a[k-1];
while((i/=10)>0) j++;
j+=(k-1)*6;
cout<<"共"<
//输出结果
cout< for(i=k-2;i>=0;i--)
{
if(a[i])
{
j=B;
while(a[i]<(j/=10)) cout<<"0";
}
else
cout<<"00000";

cout< }

cout<
}