我收到运行时错误,请帮助纠正问题。它可能是全球计数的两个人吗?
#include <stdio.h>
int count=0;
long long fact(long long num)
{
if(num==0)
return 1;
else
return (num*fact(num-1));
}
long long fzro(int abc)
{
if(abc%10 == 0)
{
count++;
fzro(abc/10);
}
return count;
}
int main(void)
{
int lst,i;
unsigned long long ar[100000];
scanf("%lld",&lst);
for(i=0;i<lst;i++)
{
scanf("%lld", &ar[i]);
printf("%lld \n", fzro(fact(ar[i])));
}
}
答案 0 :(得分:1)
你不需要计算阶乘,然后尝试找到它的尾随零。你得到运行时错误的原因是你试图计算非常大数的阶乘值。例如100!将有600位数字,太大而无法处理导致RE。相反,你需要保持将数字除以5并在每个中间步骤添加你将n除以5时得到的商的值。加上总和后得到的最终值将是你的答案。
int ret = 0;
while ( N )
{
ret += N / 5;
N /= 5;
}
ret的值是尾随零的数量。使用上述想法尝试获得AC:)