C语言程序,用于在给定编号的FACTORIAL末尾找到尾随的ZEROS

pop*_*pop 2 c factorial trailing

我已返回代码以查找阶乘并在阶乘末尾显示尾随零,但输出错误...您能帮我找到错误吗?

#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;
}
Run Code Online (Sandbox Code Playgroud)

chq*_*lie 6

您的代码仅适用于以下极小的值N:最多9。对于稍大的值,您需要elsebreak语句之前添加一个关键字,在其他几种情况下,您将获得正确的结果。

对于较大的值,必须计算除以阶乘的5的幂。您可以通过将5的幂相加来递增地执行此操作,将每个数字除以并包括N

#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;
}
Run Code Online (Sandbox Code Playgroud)

一个甚至更简单,更快速的解决方案是:计算5小于或等于N的倍数,加上的倍数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;
}
Run Code Online (Sandbox Code Playgroud)