poj1423Big Number

来源:互联网 发布:eplan更新主数据 编辑:程序博客网 时间:2024/06/18 14:40

http://poj.org/problem?id=1423

方法一:斯特林公式:这个公式在计算N!时很方便。然后直接调用log10(n!)=log10(1)+……log10(n)。将这个公式代入就行

#include<iostream>#include<stdio.h>#include<math.h>using namespace std;double pi=acos((double)-1),e=exp((double)1);int main(){int n,m;double ans;scanf("%d",&n);while(n--){scanf("%d",&m);ans=0.5*(log10(2*pi*m))+m*(log10(m/e));m=(int)ans+1;printf("%d\n",m);}return 0;}

方法二:直接调用og10(n!)=log10(1)+……log10(n),进行打表。

#include<iostream>#include<stdio.h>#include<math.h>using namespace std;#define M 10000001int a[10000001];void plist(){int plen,i,j;memset(a,0,sizeof(a));double s;s=0;for(i=1;i<=M;i++){s+=log10((double)i);a[i]=(int)s+1;}}int main(){int n,i,j,m;while(~scanf("%d",&n)){plist();for(i=0;i<n;i++){scanf("%d",&m);printf("%d\n",a[m]);}}}


0 0
原创粉丝点击