为什么我在这个程序中遇到分段错误(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;
}
答案 0 :(得分:1)
a
数组可以包含5000个元素,但不要检查k
和j
是否大于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++;
}
...