2017-11-09 8 views
-2

이 프로그램을 작성했습니다. 하지만 산술 예외 오류가 발생합니다. 프로그램 :Artihmetic 예외 오류 받기

#include<bits/stdc++.h> 
using namespace std; 
int fact(int n) 
{ 
    int facte = 1; 
    for (int i = 1; i <= n; i++) 
     facte *= i; 
    return facte; 
} 
int main() 
{ 
    int n, k; 
    cin >> n >> k; 
    int sum1 = 0; 
    int res = 0; 
    int temp = k; 
    int term1, term2, term3; 
    while ((n - temp) > 1) 
    { 
     term1 = fact(n); 
     term2 = fact(n - temp); 
     term3 = fact(temp); 
     res = int((term1/(term2 * term3))); 
     sum1 += res; 
     temp--; 
    } 

    cout << sum1 * fact(n - k - 1) + 1; 
} 

입력 :

n=4 and k=2
오류 :
 GDB trace: 
    Reading symbols from solution...done. 
    [New LWP 18123] 
    Core was generated by `solution'. 
    Program terminated with signal SIGFPE, Arithmetic exception. 
    #0 main() at solution.cc:29 
    29  res=int((term1/(term2*term3))); 
    #0 main() at solution.cc:29

+0

'term2'또는 'term3'은 0이어야합니다. – dasblinkenlight

+0

'p term2'와'p term3'은 어떤 값을 가지고 있는지 알고 싶습니다. – pm100

+0

'sum + = res; 대신에'sum1 + = res;'이어야한다고 생각합니다. –

답변

0

가 INT 오버 플로우 수있는 두 개의 요인 수를 곱.

도 변경

res = (term1/term2)/term3; 

// 추가 괄호와

res = int((term1/(term2 * term3))); 

그냥 확실하게 교체

temp--; 

temp++; 
+1

그리고 그 계승 자체가 오버플로하지 않았다고 가정합니다. – user4581301

+0

오른쪽. 그러나 그들이 그렇게했다면 이전에 예외를 제기했을 것입니다. 이 경우에는 long int 또는 다른 적절한 유형을 사용하십시오. – Victor

+0

그것은 작동하지 않았다. 동일한 에러를 얻는다. –