今天在写一道题
https://www.luogu.com.cn/problem/solution/P1591
的时候看大佬开了个数组,我一直想不通如何确定这个数组的大小,为此查了很多资料,自己最终总结出了一套方法
eg:1000!
直接计算N!的数值,然后再去数位数,这个很难,因为N!很有可能超过int(32bit) 或long(64bit)的表达范围。
换一种思路,假设要求的位数为x, 那么一定满足 10^(x-1) <=N!<10^x。两边取10为底的对数,得到x-1<=log10(N!)<x。最终x 取 int(log10(N!))+1.
log10(N!) = log10(N)+log10(N-1)+log10(N-2)+…+log10(1)
所以:
为了贯彻取大不取小的理念,我们假设有1000个lg1000相加,共有3000位,所以数组开在3000就完全o98k了(▽),实际的位数为2568位,其实也差不多,好了,这个好办法就是这样的啦~~~
学到就是赚到