UVA1185 Big Number

Posted ah2002

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVA1185 Big Number相关的知识,希望对你有一定的参考价值。

题目大意:求十进制下x!的位数

这题其实就是要求(lg)函数值的前缀和啊

对于一个数x,若(lg x=y),则其位数为(lfloor y+1 floor)

然后对于对数,我们有(lg prod_{i=1}^x i= sum_{i=1}^x lg i)

预处理前缀和之后在线(Theta(1))回答询问即可

#include"cstdio"
#include"cstring"
#include"iostream"
#include"algorithm"
#include"cmath"
using namespace std;

const int MAXN=1e7+5;
const double eps=1e-8;

double lg[MAXN];
int tp[MAXN];
int T;

int main()
{
    for(int i=1;i<=1e7;++i) lg[i]=lg[i-1]+log10(i);
    for(int i=1;i<=1e7;++i) tp[i]=lg[i]+1;
    scanf("%d",&T);
    while(T--){
        int x;scanf("%d",&x);
        printf("%d
",tp[x]);
    }return 0;
}

以上是关于UVA1185 Big Number的主要内容,如果未能解决你的问题,请参考以下文章

UVA 10970-Big Chocolate

UVa 10970 Big Chocolate (想一下就AC了)

UVA10970 Big Chocolate水题

UVa10220:I Love Big Numbers !

1018 Big Number 简单数论

C - Big Number