您的位置:

c语言求阶乘末尾0的个数,c语言1000的阶乘后面有多少个0

本文目录一览:

如何用C++编程阶乘尾数零的个数,N!末尾有多少个零

为了解决这个问题,必须首先从数学上分析在N!结果值的末尾产生零的条件。不难看出:一个整数若含有一个因子5,则必然会在求N!时产生一个零。因此问题转化为求1到N这N个整数中包含了多少个因子5。若整数N能被25整除,则N包含2个因子5;若整数N能被5整除,则N包含1

个因子5。

*程序说明与注释

#include

using

namespace

std;

int

main()

{

long

a,count

=0;

for(a=5;a=N;a+=5)

//循环从5开始,以5的倍数为步长,考察整数

{

++count;

//若为5的倍数,计数器加1

if(!(a%25))

++count;

//若为25的倍数,计数器再加1

}

cout"The

number

of

in

the

end

of

N!

is:"

return

0;

}

C语言编程题(阶乘+尾数几个零)

#includestdio.h

void main()

{

int b,n;

int temp[20];

int i=2,j=0,k;

int yinziNum[20];

cout"请输入一个进制数和一个整数:"endl;

cinbn;

if(b%2==0)

while(b%i==0)

{

while(b%i==0)

{temp[j]=i;

b=b/i;}

i++;

if(b%i==0)

j++;

}

for(i=2;i=n;i++)

for(k=0;k=j;k++)

while(i%temp[k]==0i!=0)

{yinziNum[k]++;

i=i/temp[k];}

min=yinziNum[0];

for(i=1;ik;i++)

if(yinziNum[i]min)

min=yinziNum[i];

coutb"进制数"n"的阶乘末尾共有"min"个零!"endl;

}

100!末尾有多少个0C语言

100!=1*2*3*...*100

结果中末尾0由以下三种情况生成:

(1)乘以100,得到2个0。

(2)乘以10、20、30、40、60、70、80或90得到1个0,共8个0。

(3)一个偶数乘以5得到1个0,共有5、15、35、45、55、65、85、95,共8个0。

(4)偶数乘以50会得到2个0。

(5)4乘以25或75各会得到2个0,共4个0。

故100!末尾共有24个0。

算法描述:

从4!=24开始计算,如果阶乘值末尾为0,就把末尾0去掉,计数器加1;如果末尾不为0,只保留个位数即可。最后再进行一次末尾0的扫描操作。

C语言程序:

#include stdio.h

void main()

{

int i;

long f = 24;

int c = 0;

for(i=5; i=100; i++)

{

f *= i;

if(f%10==0)

{

f /= 10;

c++;

}

else

{

f = f % 10;

}

}

while(f%10 == 0)

{

f = f / 10;

c++;

}

printf("末尾0的总数量:%d", c);

}

运行结果:

末尾0的总数量:24

C语言编程求100的阶乖,末尾有多少个零

以C语言的数据类型来求100的阶乘不造成数据过大溢出是不现实的,所以不能在求得100的阶乘之后再数它末尾有多少个0,只能在累乘的过程中遇到一个0就干掉,最后数总共干掉了多少个,至于由于溢出前面丢掉了多少位的数就管不了了,代码如下:main()

{

long

a=1;

int

i,n=0;

for(i=2;i=100;i++)

{

a*=i;

if(a10000)a=a%10000;

/*只要末几位不变对乘法结果的末几位就没有影响,所以在此限定a不要过大*/

loop1:

if(a10a%10==0){a/=10;n++;goto

loop1;}

/*为了防止十位也是0,所以返回来再判断一次*/

}

printf("%d\n",n);

}结果是24