hdu 1018

来源:互联网 发布:合肥科研知乎 编辑:程序博客网 时间:2024/06/01 07:48
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int main()
{
    int i,n,cas;
    double  f;
    cin>>cas;
    while(cas--)
    {
        f=0.0;
        cin>>n;
        for(i=2;i<=n;i++)
            f+=log10(i*1.0);
        int ans=f+1;
        cout<<ans<<endl;
    }
    return 0;

}

/******还是比较有意思的一道题目,比如123456=10^5+1.23456,取对数后为5+log10(1.23456)所以位数为取对数后的小数取整

再加1,不过算阶乘时要注意,当n很大时可能会溢出,所以还是得转换为对数,只需要进行n次加法和乘法就行了,

再次体会到了对数的神奇,记得加头文件cmath***/

1 0