c - FCTRL-Spoj,SIGSEGV

标签 c

我遇到运行时错误,请帮助纠正问题。难道是由于全局声明计数导致的?

http://ideone.com/6PMlrY

#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])));
    }
}

问题集链接: http://www.spoj.com/problems/FCTRL/

最佳答案

您不需要计算阶乘,然后尝试查找其尾随零。出现运行时错误的原因是您正在尝试计算非常大的数字的阶乘值。比如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/

相关文章:

c - 这段代码如何在不使用 sizeof( ) 的情况下确定数组大小?

c++ - 用随机数填充数组

使用属于另一个函数的参数从 main() 调用函数

c - 改变C中数组的大小

c - 这段代码打印范围内的素数有什么问题

c - int 与 char[2] 错误的间接级别不同

c - 算术表达式也无法在 yacc 语法中正确解析

c - 如何减少表达

c - 如何处理 "((9^x)-2)%5"而不会在更高的 x 处溢出?

C 程序 - 将 while 循环中的整数相加