今天看到一个蛮有意思的题,是问“100!”的尾数有多少个零。
尾数有多少个零,实际上指的是从这个数的最后一个不为0的数的下一个(也就是0)开始计数,一直到最后一个数(这些数自然都是0)有多少个0。
好吧,也就是说13330330000的尾数有4个零……
一个整数若含有因子5,则必然在求解100!时产生一个0,也就是说我们从5开始for循环,每次循环都给加上5,然后计数器加1。同时如果该整数还能被25整除,计数器还应该再加上1。
因此代码如下:
#include<stdio.h>
int main()
{
int a,count =0;
for(a=5;a<=66;a+=5)
{
++count;
if(!(a%25))
++count;
}
printf("100!的尾数有%d个零。\n",count);
return 0;
}
题目后面进一步问了如何求出任意N!的尾数有多少个零。
#include<stdio.h>
int main()
{
int n;
printf("请输入N:\n");
scanf("%d",&n);
if(n<0)
printf("%d的阶层无意义。\n",n);
else if(n<=4)
printf("%d的阶层的尾数没有零。\n");
else
{
int a,count =0;
for(a=5;a<=n;a+=5)
{
++count;
if(!(a%25))
++count;
}
printf("100!的尾数有%d个零。\n",count);
}
return 0;
}
本文就这样结束了吗?
题目的解答中有这么一段话:先求出100!的值,然后数一下末尾有多少个零。事实上,由于计算机所能表示的整数范围有限,这是不可能的。
首先,什么叫计算机所能表示的整数范围?应该叫int等数据类型的整数范围有限才对,计算机嘛……撑死了只能说不能存储而非不能表示。
另外100的阶层真的求不出来吗?请往下读。
我的博客中有大量关于Lisp,或者说Scheme的博文,使用这个语言,几行代码就能搞定了不是吗?欢迎阅读我的其他博文……
(define (fact n)
(if (= n 1)
1
(* n (fact (- n 1)))))
;Value: fact
1000的阶层也能求,截图为证……
闲得无聊,以下是10000的阶层,大家可以继续算更大的数,哈哈……
………………
我发现这个CSDN博客写上这么多数字之后博客没法提交,有异常……没办法,只能上传了……下载后觉得有意思记得回来点赞哦……
传送门:10000的阶层
时间: 2024-10-13 03:21:02