【问题标题】:C++ count digit of factorial of a large digit, two digit number or more [closed]C ++计数大位数,两位数或更多的阶乘位数[关闭]
【发布时间】:2021-03-13 17:44:00
【问题描述】:

Click Here to View CodeFunction to perform factorial of digit and count the number of digit of that factorial

当我给出“输入:13”时,此代码给出了所需的输出,但是当我使用“输入:大于此或 3 位数字的数字”时,它无法计算。我认为这是因为 unsigned long 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;
}

【问题讨论】:

  • 如果不是很明显,这样的练习对他们来说总是有窍门的。您不能只计算阶乘并计算数字(因为这太慢和/或数字不适合unsigned long long)。您需要一些巧妙的公式来确定位数而不计算阶乘。
  • 截图中的代码与问题中的代码不同。这是为什么呢?
  • 可以用log10解决这个问题::////////////int digitsInFactorial(int N) { if(N

标签: c++ factorial digits unsigned-long-long-int long-long


【解决方案1】:
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;
}

【讨论】:

  • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票
  • 这里我们必须计算任何特定数字的阶乘的位数。因此,为了发现我使用 log10,因为它有助于将大阶乘更改为它可以包含的位数(为了进一步参考,您可以看到 this->link。在那一层之后,您将能够看到相应的结果您的阶乘的位数。请log10 帮助您解决此问题。
猜你喜欢
  • 1970-01-01
  • 2021-08-11
  • 2010-11-30
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多