我遇到运行时错误,请帮助纠正问题。难道是由于全局声明计数导致的?
#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])));
}
}
最佳答案
您不需要计算阶乘,然后尝试查找其尾随零。出现运行时错误的原因是您正在尝试计算非常大的数字的阶乘值。比如100!将有 600 位数字,这对于处理导致 RE 来说太大了。相反,您需要继续将数字除以 5,并在每个中间步骤加上 n 除以 5 所得的商值。相加所得的最终值将是您的答案。
int ret = 0;
while ( N )
{
ret += N / 5;
N /= 5;
}
ret 的值是尾随零的数量。使用上述想法尝试获得 AC :)
关于c - FCTRL-Spoj,SIGSEGV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19137285/