题解 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的主要内容,如果未能解决你的问题,请参考以下文章