输入一个数,求这个数的阶乘有几位。
恩,题目就是这么短,然而我想了半天没想出来= =这么高精度的一个数还要选位数。要是用字符串又不好算,于是......在想了N长时间后我又去翻DISCUSS了,好吧,是能推出来公式的啊,写了那么久编程代码都快把数学的东西忘掉了= =
所以我就这样看懂了DISCUSS里的公式,然后把题A出来了(好像哪里不对......),额,发个链接吧,大神讲的挺清楚的╮(╯_╰)╭我嘛,只贴个代码吧~
DISCUSS:http://acm.split.hdu.edu.cn/discuss/problem/post/reply.php?postid=11661&messageid=1&deep=0
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
int T;
int n,ans;
int i;
double sum;
scanf("%d",&T);
while(T--)
{
sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
sum=sum+log10(i);
}
ans=(int)sum+1;
cout<<ans<<endl;
}
return 0;
}