首页 > 试题广场 >

N!表示 1*2*…*N。求 1024!的末尾有多少个0?

[单选题]
N!表示 1*2*…*N。求 1024!的末尾有多少个0?比如10!=3628800末尾有两个0。
  • 113
  • 253
  • 1023
  • 1024
1024/5=204; 204/5=40; 40/5=8; 8/5=1; 1/5=0; 204+40+8+1=253
发表于 2015-07-20 09:20:56 回复(0)
253
发表于 2015-08-15 21:06:39 回复(0)
将1024!看做是一个很长的乘式。根据乘法的结合律,找出所有小于1024的数中相乘结果末尾为0的因子。可以想到末尾为0的数与其他数相乘、5的倍数与2的倍数相乘,都会得到末尾为0的数。进一步想末尾为0的数包含在5的倍数中。所以只要找出所有5的倍数与2的倍数相乘就能得到0。然而明显2的倍数是远远大于5的倍数的。所以只要找出长乘式中的所有5的个数就能解决问题。
再次,5的倍数乘2的倍数可以至少得到末尾为1个0的数。如15*2=30。但是5的n次方,包含n个5,可得到末尾为更多0的数。如25*4=5*5*4=100。125*8=5*5*5*8=1000。25与4的倍数相乘会得到2个0,但25的倍数也是5的倍数,其中一半已经在5的倍数中了,只要计算25的倍数的个数即可

综上。1024!中5的个数应为:
是5的倍数的数有: 1024 / 5 = 204个
是25的倍数的数有:1024 / 25 = 40个
是125的倍数的数有:1024 / 125 = 8个
是625的倍数的数有:1024 / 625 = 1个
所以1024! 中总共有204+40+8+1=253个因子5。
也就是说1024! 末尾有253个0。
发表于 2015-05-21 19:19:57 回复(0)
void main()
{
int i,cntA,cntB,num,tnum;
while(1)
{
printf("请输入你需要用于阶乘的N:\n");
scanf("%d",&i);
cntA = 0;
cntB = 0;
for(num=1;num<=i;num++)
{
tnum = num;
while(tnum%2==0)
{
cntA++;
tnum = tnum/2;
}
tnum = num;
while(tnum%5==0)
{
cntB++;
tnum = tnum/5;
}
}
if(cntA > cntB)
{
cntA = cntB;
}
printf("共有0个数:%d\n",cntA);
}
输入1024
结果为253
复制去Google翻译 翻译结果
发表于 2015-04-13 21:35:03 回复(0)
B 2 * 5 = 10 贡献一个0 将1024!写成质因数相乘 就是看 2 与 5 的个数(明显2的个数大于5)
发表于 2014-10-18 16:53:33 回复(1)