本文目录一览:
如何用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