小白快哭了,这个循环嵌套怎么优化啊题目一直tle


#include<stdio.h>
int main()
{
    long long n,i,ans,x;
    while(scanf("%lld",&n)!=EOF){
        if(n<5){
            printf("0");
            continue;
        }
        for(i=5;i<=n;i+=5){
            x=i;
            while(x%5==0){
                x/=5;
                ans++;
            }
        }
        printf("%lld",ans);
    }
    return 0;
}

img

img

img

ans 没赋初值

long long n,i,ans,x;这里改成:
long long n,i,ans =0,x;

能给一下题目要求吗?tle是因为三重循环,一般判题系统必tle

这题这么写就可以了,供参考:

#include <stdio.h>
int main()
{
    long long sum, n;
    while (scanf("%lld", &n) == 1 && n != -1)//输入 -1 结束输入
    {
        sum = 0;
        while (n > 0)
        {
            sum += n / 5;
            n /= 5;
        }
        printf("%lld\n", sum);
    }
    return 0;
}


比方说求15的阶乘,也就是求

  1 × 2 × 3 × 4 × 5 × 6 × 7 × 8 × 9 × 10 × 11 × 12 × 13 × 14 × 15 的末尾0的个数。现在我们把这15个数分解出来含有5的因子

  1 × 2 × 3 × 4 × 5 × 6 × 7 × 8 × 9 × 2 × 11 × 12 × 13 × 14 × 3

                 × 5         × 5

  每有一个5,阶乘末尾就会多出来一个0,这样n / 5就能统计完第一层5的个数,依次处理,就能统计出来所有5的个数