寻找因子的分段错误

时间:2016-04-07 17:28:50

标签: c segmentation-fault

为什么我在这个程序中遇到分段错误(SIGSEGV)。

我试图找到像100,200这样的大数的阶乘,但我不知道为什么在某些情况下它会显示分段错误。帮助我。

约束:

  
      
  • 1≤T≤100000
  •   
  • 1≤N≤100000
  •   
#include<stdio.h>
int main()
{
    long long int t,mod=1589540031;
    long long int a[5000]; 
    long long int n,i,j,temp,k,x;

    scanf("%lld",&t);
    while(t--)
    {
       scanf("%lld",&n);
       a[0]=1;  
       k=1;    

       temp = 0; 
       for(i=1;i<=n;i++)
       {
            for(j=0;j<k;j++)
            {
               x = a[j]*i+temp; 
               a[j]=x%10; 
               temp = x/10; 
            }
             while(temp>0)
             { 
               a[k]=temp%10;
               temp = temp/10;
               k++; 
             }
      }
      for(i=k-1;i>=0;i--) 
          printf("%lld",a[i]%mod);
          printf("\n");
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

a数组可以包含5000个元素,但不要检查kj是否大于5000。

只要您尝试使用索引&gt;访问a数组的元素即可5000你得到未定义的行为。

for(j=0;j<k;j++)
{
  x = a[j]*i+temp;  // <<<<< j could be > 5000
  a[j]=x%10; 
  temp = x/10; 
}

while(temp>0)
{ 
  a[k]=temp%10;     // <<<<< k could be > 5000
  temp = temp/10;
  k++; 
}
...