首页 > 其他 > 详细

UVA1185 Big Number

时间:2019-11-24 20:30:07      阅读:88      评论:0      收藏:0      [点我收藏+]

原网页

洛谷翻译网页

这是本蒟蒻发的第二篇黑题的题解,很开心。

根据log的定理,\(log_n{(x\times y)}=log_n{x}+log_n{y}\),且任意一个数x的位数是\(log_{10}(x)+1\),所以可以推出
\[log_{10}(n!)+1=log(\prod_{i=1}^{n}i)+1=\sum_{i=1}^{n} log_{10}i+1 \]

#include<stdio.h>
#include<ctype.h>
#include<math.h>
#define re register
using namespace std;
namespace IO
{
    template<typename T>
    inline void read(T & x)
    {
        x=0;
        bool b=false;
        char ch=getchar();
        while(!isdigit(ch)&&ch^'-')
            ch=getchar();
        if(ch=='-')
        {
            b=true;
            ch=getchar();
        }
        while(isdigit(ch))
        {
            x=(x<<1)+(x<<3)+(ch^'0');
            ch=getchar();
        }
        if(b)
            x=~x+1;
        return;
    }
    char Out[1000*7+10],*fe=Out,ch[25];
    int num=0;
    template<typename T>
    inline void write(T x)
    {
        if(!x)
            *fe++='0';
        if(x<0)
        {
            *fe++='-';
            x=-x;
        }
        while(x)
        {
            ch[++num]=x%10+'0';
            x/=10;
        }
        while(num)
            *fe++=ch[num--];
        *fe++='\n';
    }
    inline void flush()
    {
        fwrite(Out,1,fe-Out,stdout);
        fe=Out;
    }
}
using IO::read;
using IO::write;
const int N=1e7+10;
int T,x,maxx,tmp[N];
double lg[N];
int main()
{
    read(T);
    for(re int i=1; i<=1e7; i++)
        lg[i]=lg[i-1]+log10(i);
    for(re int i=1; i<=1e7; i++)
        tmp[i]=lg[i]+1;
    while(T--)
    {
        read(x);
        printf("%d\n",tmp[x]);
    }
    return 0;
}

UVA1185 Big Number

原文:https://www.cnblogs.com/wangjunrui/p/11923555.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!