簡體   English   中英

c中階乘的尾隨零數

[英]Number of Trailing Zeros in a Factorial in c

我是C語言編程的新手,我想找出給定數階乘中的尾隨零數

{
        long int n=0,facto=1,ln=0;
        int zcount=0,i=1;
        printf("Enter a number:");
        scanf("%ld",&n);
        if(n==0)
        {
          facto=1;
        }
        else
        {
           for(i=1;i<=n;i++)
           {
              facto=facto*i;
           }
        }
        printf("%ld",facto);
        while(facto>0)
        {
           ln=facto%10;
           facto/10;
           if(ln=!0)
           { 
               break;
           }
           else
           { 
               zcount+=1;
           }
        }
        printf("Tere are Total %d Trailing zeros in given factorial",zcount);
}

我試圖計算數字的模數,該模數將返回給定數字的最后一位作為余數,然后返回n/10; 將刪除最后一個號碼。

執行程序后,輸出始終將尾隨零的數目顯示為“ 0”,即使存在零也始終滿足條件if(ln =! 0)

讓我們記住數學( Wiki ):

int trailingZeroCountInFactorial(int n)
{
  int result = 0;
  for (int i = 5; i <= n; i *= 5)
  {
    result += n / i;
    if(i > INT_MAX / 5) // prevent integer overflow
      break;
  }
  return result;
}

這個

if(ln=!0)

表示ln = !0即您為ln分配了!0 ,因此條件始終為true,將其更改為

if (ln != 0)

您可以將賦值用作真值,但是如果您確定這樣做的話。

為防止意外執行,請打開編譯器警告。

中的正確語法

if(ln!=0) 
{ 
    // do something     
}

if ( ln=!0 ) ,首先對!0求值,然后=ln分配!0 (即1 ),然后if檢查ln的值,如果該值不為零(在這種情況下為1到先前的分配),然后執行break語句。

同樣,此方法不適用於大於25的數字。很明顯, n!中5的冪n! 將會是答案。

下面的表達式給出n!素數p的冪n! f(n/p) + f(n/p^2) + f(n/p^3) + ..... (until f(n/p^k) return zero ,其中f(a)返回的最大整數a或地板a

package lb;

import java.util.Scanner;

public class l1 {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner s=new Scanner(System.in);
    int n=s.nextInt();
    int a=n/5;
        if(a<5)
        {
        System.out.println(a);
        }
        else
        {
        int c=a/5+a;
        System.out.println(c);
        }
    }
}

嘗試這個

int trailingZeroCountInFactorial(int n)
{
  int result = 0;
  for (int i = 5; i <= n; i *= 5)
  {
    result += n / i;
  }
  return result;
}

要了解,它是如何工作的,有一個很好的解釋在這里

{

long int n=0,facto=1,ln=0;
int zcount=0,i=1;
printf("Enter a number:");
scanf("%ld",&n);
if(n==0)
{
  facto=1;
}
else
{
   for(i=1;i<=n;i++)
   {
      facto=facto*i;
   }
}
printf("%ld\n",facto);
while(facto>0)
{
   ln=(facto%10);
   facto/=10;  //here you done one mistake
   if(ln!=0)   //another one here
   {
       break;
   }
   else
   {
       zcount+=1;
   }
}
printf("Tere are Total %d Trailing zeros in given factorial",zcount);

} / 運行此代碼,它將立即運行,您已經知道的錯誤我猜 /

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM