C++ C++;计算大数字、两位数或更多数字的阶乘位数

C++ C++;计算大数字、两位数或更多数字的阶乘位数,c++,factorial,digits,unsigned-long-long-int,long-long,C++,Factorial,Digits,Unsigned Long Long Int,Long Long,当我给出“输入:13”时,该代码给出所需的输出,但当我使用“输入:大于此数字或3位数的数字”时,则无法计算。我认为这是因为超出了无符号long可以容纳的值的数量。那个么,有什么解决方案,我怎么能找到一个大数字的阶乘的数字呢 ///// user function code////////////// unsigned long long int digitInFactorial(int N) { int count=0; if(N==0) || (n==1)){ return 1; }else{

当我给出“输入:13”时,该代码给出所需的输出,但当我使用“输入:大于此数字或3位数的数字”时,则无法计算。我认为这是因为超出了无符号long可以容纳的值的数量。那个么,有什么解决方案,我怎么能找到一个大数字的阶乘的数字呢

///// user function code//////////////
unsigned long long int digitInFactorial(int N)
{
int count=0;
if(N==0) || (n==1)){
return 1;
}else{
int result=1;
for(int i=1;i<=N;i++){
result=result+1;}
while(result!=0)
{
result=result/10;
count=count+1;
}}
return count;
}
///user函数代码//////////////
无符号长整型数字工厂(整数N)
{
整数计数=0;
如果(N==0)|(N==1)){
返回1;
}否则{
int结果=1;
对于(inti=1;i
intdigitsinfactorial(intn){
if(N<0)
返回0;

if(N)(如果不是很明显,像这样的练习总是有诀窍的。你不能只计算阶乘并计算数字(因为这太慢和/或数字不适合
无符号long
)。您需要一些聪明的公式来确定位数,而无需计算阶乘。屏幕截图中的代码与问题中的代码不同。这是为什么?可以使用log10解决此问题://如果(n请不要只发布代码作为答案,还要解释代码的作用以及它是如何解决问题的。带有解释的答案通常更有帮助,质量更好,更容易吸引读者。在这里,我们必须计算任何特定数字的阶乘的位数。因此发现我使用log10是因为它有助于将大阶乘更改为它可以包含的位数(为了进一步的参考,您可以看到这个->。在该层之后,您将能够看到结果,并可以看到阶乘的相应位数。可以
log10
帮助您解决此问题。
int digitsInFactorial(int N) {
    if (N < 0)
        return 0;
    
    if (N <= 1)
        return 1;
        
    double digit=0;
    
    for (int i = 1; i <= N; i++)
        digit = digit + log10(i);

    return floor(digit) + 1;
}