C 程序查找给定数字的 FACTORIAL 末尾的尾随零

C program to find the trailing ZEROS at the end of a FACTORIAL of a given number

我有 return 查找阶乘并在阶乘末尾显示尾随零的代码,但输出是错误的...你能帮我找出错误吗?

#include <stdio.h>

int main() {
    int m = 1, i, N, count = 0;

    scanf("%d", &N);

    for (i = 1; i <= N; i++) {
        m = m * i;
    }
    printf("%d", m);

    while (m > 0) {
        if ((m % 10) == 0) {
            count = count + 1;
            m = m / 10;
        }
        break;
    }
    printf("%d", count);

    return 0;
}

你有两个问题

  • 你折叠了两个输出,所以你只能看到其中一个/你看不到谁是谁,只需在它们之间添加一个分隔符
  • 你数的时候少了一个 else,所以你数到 1,阶乘 10 的结果是错误的

所以最小的变化会产生:

int main()
{
    int m=1,i,N,count=0;

    scanf("%d",&N);

    for(i=1;i<=N;i++)
    {
        m=m*i;
    }
    printf("%d\n",m); /* <<< added \n */

    while(m>0)
    {
      if((m%10)==0)
      {
        count=count+1;
        m=m/10;
      }
      else /* <<< added else */
        break;
    }
    printf("%d\n",count); /* <<< added \n */

    return 0;
}

更改后:

pi@raspberrypi:/tmp $ ./a.out
5
120
1
pi@raspberrypi:/tmp $ ./a.out
10
3628800
2

当然,首先假设您能够计算阶乘而不会溢出

我还鼓励您检查 scanf 读取的值,检查它 returns 1

您的代码仅适用于非常小的 N 值:最大 9。对于稍大的值,您需要在 break 语句之前添加一个 else 关键字,并且您会在更多情况下获得正确的结果。

对于较大的值,您必须计算除阶乘的 5 次方。您可以通过将每个单独数字除以 N.

的 5 的幂求和来逐步执行此操作
#include <stdio.h>

int main() {
    int N, count;

    if (scanf("%d", &N) != 1)
        return 1;

    /* only consider factors that are multiples of 5 */
    count = 0;
    for (int i = 5; i <= N; i += 5) {
        for (int j = i; j % 5 == 0; j /= 5)
             count++;
    }
    printf("%d\n", count);
    return 0;
}

一个更简单和更快的解决方案是:计算小于或等于N5的倍数,加上5*5的倍数,等等

代码如下:

#include <stdio.h>

int main() {
    int N, count;

    if (scanf("%d", &N) != 1)
        return 1;

    count = 0;
    for (int i = N; (i /= 5) > 0;) {
        count += i;
    }
    printf("%d\n", count);
    return 0;
}
#include <stdio.h>

int main()
{
    int n,i,f=1,t,c=0;
    printf("Enter  number ");
    scanf("%d",&n);
    t=n;
    for(i=1;t>=5;i++)
    {
        t=n/5;
        c=c+t;
        n=t;
    }
    printf("number of zeros are %d",c);

    return 0;
}