-1

我有以下用于hackerearth竞争的代码并用C ++(g ++ 4.8.4)编写,它在运行时提供SIGFPE我刚刚完成

请告诉如何修复它

    #include<iostream>
    using namespace std;
    int factorial(int n);
   int main()
  {
   int n , k ,totitem , totways=0 , har1,har2, ansh=1;
int res;
cin>>n>>k;
totitem = (n/k);

ansh=factorial(n);

if(totitem>0)
for(int i=0;i<=totitem*k;i+=k)
{
    har1=factorial(i);
    har2=factorial(n-i);
    totways+=(ansh/(har1*har2));
}

cout<<totways;

return 0;
}
int factorial(int n)
{
if(n>1)
 return n*factorial(n-1);
 else
// if(n==0 || n==1)
 return 1;
}
4

1 回答 1

1

它通常是除以零误差。

您的代码中有两个除法语句。

1:

totitem = (n/k);

您不清理输入的地方。

2:

har1=factorial(i);
har2=factorial(n-i);
totways+=(ansh/(har1*har2));

如果任何 har 参数等于 0,这将失败。

问题的最可能原因是您正在使用 32 位有符号整数 (int) 进行阶乘计算,这限制为 12 的阶乘!尝试对较大的数字进行阶乘会导致溢出,从而导致结果不正确并最终为零值,从而导致运行时错误。

于 2016-08-28T00:42:59.607 回答