浏览器标题切换
浏览器标题切换end

51nod-1130-N的阶乘的长度V2(斯特林近似)-套斯特林公式

输入N求N的阶乘的10进制表示的长度。例如6! = 720,长度为3。

输入

第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 1000)
第2 - T + 1行:每行1个数N。(1 <= N <= 10^9)

输出

共T行,输出对应的阶乘的长度。

输入样例

3
4
5
6

输出样例

2
3
3


对于n来说,要是求阶乘的话数据范围需要达到10^9以上才可以使用斯特林公式,否则会精度损失,造成误差比较大。
但是要是求的是n的阶乘的长度的话,可以利用公式((log10(2*PI*n))/2+n*(log10(n/e))+1),但是直接让计算机去求对数即lgN!+1这个好像是不对的,我用了
(ll)((log10(sqrt(2*PI*n*1.00))*pow(n/e,n))+1))运行都是错的,所以求长度还是用第一个,自己求好对数再让计算机去运行吧



复制代码
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<cmath>
 4 using namespace std;
 5 const double PI=3.1415926535898;
 6 const double e=2.718281828459;
 7 typedef long long ll;
 8 
 9 int main()
10 {
11     int tt,n;
12     scanf("%d",&tt);
13     while(tt--)
14     {
15         scanf("%d",&n);
16         printf("%lld\n",(ll)((log10(2*PI*n))/2+n*(log10(n/e))+1));//注意是long long,int的话会WA
17     }
18     return 0;
19 }
复制代码

 

 
posted @   抓水母的派大星  阅读(157)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示