主题:toj1016怎么做?
euc
[专家分:4310] 发布于 2006-04-16 19:41:00
http://acm.tongji.edu.cn/showproblem.php?problem_id=1016
找n!的高第2位。。。*_*
回复列表 (共8个回复)
沙发
boxertony [专家分:23030] 发布于 2006-04-18 23:06:00
用n!≈sqrt(2*pi*n)*(n/e)^n计算即可
板凳
maxumi [专家分:2200] 发布于 2006-04-19 11:40:00
用实数,从1开始乘,超过100就不停地除以10(除到小于100为止),乘完之后取个位数.
另外,别忘了给我加30分~~~~~~~~~~~~~~
3 楼
euc [专家分:4310] 发布于 2006-04-19 16:49:00
boxertony, 知道了n!能怎样?
maxumi, 我用浮点数试了,不成功.
4 楼
maxumi [专家分:2200] 发布于 2006-04-20 10:22:00
用extended呀
5 楼
boxertony [专家分:23030] 发布于 2006-04-20 13:07:00
不需要计算出n!,只需要根据那个公式两边取对数,得到的数据取小数部分x,再计算10^x,它的第二位就是啦。更精确一点的公式是n!≈sqrt(2*pi*n)*(n/e)^n*(1+1/(12n)),并且只有当n>7才是准确的。
不知道有没有更快的方法。
6 楼
euc [专家分:4310] 发布于 2006-04-20 20:07:00
maxumi, extended似乎是pascal的类型吧.
boxertony,这个方法是哪来的?有没有资料?
7 楼
boxertony [专家分:23030] 发布于 2006-04-20 23:51:00
这个就是 stirling公式。在下面的网页有更详细的介绍:
http://mathworld.wolfram.com/StirlingsSeries.html
8 楼
rickone [专家分:15390] 发布于 2006-04-21 20:35:00
嘿嘿,我当时还真是用浮点数硬乘出来AC的,呵呵~~
我来回复