hdu 1018 Big Number(n!求位数)

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 10:51   34   0

http://acm.hdu.edu.cn/showproblem.php?pid=1018

一天了,看不下数,坐不下题。。。唉。。终于a了一道了。。。求n!阶乘的数的位数。才开始我直接按大数阶乘处理。结果肯定超时。最后看了一下解题报告。原来这么简单,还是做得题少,没接触过。。

第一种:log10(n!)=log10(1)+log10(2)+.....+log10(n);

循环求和即可,注意最后要+1,因为log10(1)=0;所以要加上这个误差;

View Code
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int main(){

int n,i,t;
double sum;
scanf("%d",&t);
while(t--){
sum=1;
scanf("%d",&n);
for(i=1;i<=n;i++){
sum+=log10((double)i);
}
printf("%d\n",(int)sum);
}
return 0;
}

第二中是 Stirling数,还没接触,只记住了公式:sum=(1/2)*log10(2.0*p*ni)+1.0*n*log10(n/e);

View Code
#include<iostream>
#include<cmath>
#include<cstdio>
#define e 2.7182818284590452354
#define pi acos(-1.0)
using namespace std;
int main(){
int t,n;
double sum;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
sum=1.0/2.0*log10(2.0*pi*n)+1.0*n*log10((1.0*n)/e);
printf("%d\n",(int)sum+1);
}

return 0;
}



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP