Zadania SPOJ - Dwumian

0

Man następujący problem z zadaniem http://pl.spoj.com/problems/BINOMS/. Wyskakuje mi błąd SIGFPE.
Oto kod źródłowy:

#include<iostream>
using namespace std;

long double silnia(short);
int main()
{
	int iloczyn=1,silnia=1;
	short n,k,t;
	cin >> t;	// Pobieram liczbe testów
	while(t--)
	{
		cin >> n >> k;  // Pobieram liczbę elementów zbioru i elementów podzbiorów
		if(k<0 || k>n || n>1000) continue;  // Sprawdzam warunek zadania
		if(n==k || k==0)		// Przypadek szczególny
		{
			cout << 1 << endl;
			continue;	
		}
			for(short i=n;i>=(n-k+1);--i)
				iloczyn*=i;
			for(short j=1;j<=k;++j)
				silnia*=j;
		cout << (int)iloczyn/silnia << endl;
		iloczyn=1;
		silnia=1;
			
	}
	return 0;
}


 
0
  1. nie musisz sprawdzać warunek zadania
  2. to że wynik nie przekroczy 1000000000 wcale nie oznacza że nie przekroczy tego twój iloczyn (lub silnia), wtedy przepełnienie.

Zmień algorytm.

1 użytkowników online, w tym zalogowanych: 0, gości: 1