HDOJ 1018 数学(N的阶乘)

来源:互联网 发布:qq偷菜软件下载 编辑:程序博客网 时间:2024/05/11 18:06
这道题看的时候最开始是想当大数处理。后来想想,太大了空间,时间都肯定要超标。所以我们转换了思路,用log10对数进行处理。log10(10)=1;log10(100)=2;log10(1000)=3;log10(10000)=4;接下来就不依次类推了。当a不为10的幂时向下取整就行了。这就可以发现a的位数=log10(a)+1;所以a!可以写成:int((double)log10(1)+(double)log10(2)+...(double)log10(a)));
#include <iostream>#include <math.h>using namespace std ;int main(){    int n;    cin>>n;    while(n--){        int a;        cin >> a;        double ans = 0;        for(int i = 1 ; i <= a ; i++)            ans +=log10((double)i);        ans++;        cout<<(int)ans<<endl;    }    return 0;}