要求n的阶乘的位数如果n较大时,n的阶乘必将是一个很大的数题中说1<=n<,当n=时可以说n的阶乘将是一个非常巨大的数字对于处理大数的问题,我们一般用字符串这题当n取最大值时,就是一千万个数字相乘的积太大了,就算保存在字符串中都有一点困难而且一千万个数字相乘是会涉及到大数的乘法,夶数的乘法是比较耗时的就算计算出结果一般也会超时。这让我们不得不抛弃这种直接的方法
再想一下,这题是要求n的阶乘的位数洏n的阶乘是n个数的乘积,那么要是我们能把这个问题分解就好了
在这之前,我们必须要知道一个知识任意一个正整数a的位数等于(int)log10(a) + 1;为什么呢?下面给大家推导一下:
对于任意一个给定的正整数a
现在来求n的阶乘的位数:
现在我们终于找到方法,问题解决了我们将求n的階乘的位数分解成了求n个数对10取对数的和,并且对于其中任意一个数
都在正常的数字范围之类。
总结一下:n的阶乘的位数等于
根据这个思路我们很容易写出程序