题解 UVA1185 Big Number

Posted chz-hc

tags:

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

题目链接:UVa1185

我们先考虑如何求(n)的位数

(10^{x} = n)

(n)的位数为(x + 1)

也就是(|n| = (log_{10} n) + 1(|n|)表示(n)的位数())

这个很明显吧。感性理解一下

然后我们再考虑 (|n * m|)

(|n * m| = |n| + |m|)

回到问题

要求的是(|prod_{i = 1}^{n}i|)

也就是$sum_{i = 1}^{n}|i|
$

我们设(ans[i])表示求(i)的阶乘的位数

那么(ans[i + 1] = ans[i] + log_{10}i)

我们可以先预处理出每个(ans)

然后(O(1))输出

时间复杂度为(O(1e9 + T))

(Code:)

#include <bits.stdc++.h>

const int MaxN = 100000000 + 10;

using namespace std;

inline int read() {
    int cnt = 0, opt = 1;
    char ch = getchar();

    for (; ! isalnum(ch); ch = getchar())
        if (ch == '-')  opt = 0;
    for (; isalnum(ch); ch = getchar())
        cnt = cnt * 10 + ch - 48;

    return opt ? cnt : -cnt;
}//快读优化

int n;
double ans[MaxN];

int main() {
    for (int i = 1; i <= Maxn; ++i)
        ans[i] = ans[i - 1] + log10(i);
    n = read();
    for (int i = 1; i <= n; ++i) {
        int x = read();
        printf("%d
", (int)(ans[x] + 1));
    }
    return 0;
}

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

UVa 11882 Biggest Number 题解

BZOJ 3000: Big Number (数学)

HDU 1018 Big Number

bzoj3000 Big Number 数论,斯特林公式

UVA 10970-Big Chocolate

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