なぜこのプログラムでセグメンテーションフォールト(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;
}
segfaultを正確に入力してください。その情報は質問の一部でなければなりません。 –
コードを正しくインデントできますか? – hivert
元の割り当てにはリンクしませんが、_n!_ modulo _m_を計算したように見えます。その場合は、配列を使って乗算を行う必要はありません。全体を通して、[モジュラー算術](https://en.wikipedia.org/wiki/Modular_arithmetic)を使用してください。 (0から9までの数字を印刷するときは余計ですが、無意味です。) –