Witam, musze napisać program który policzy kolejne liczby catalana dla wyrazów od 0 do 10000. http://pl.wikipedia.org/wiki/Liczby_Catalana
Mam problem z przekroczeniem zakresu liczb, gdy licze dwumian newtona to wynik przekracza zakres nawet ulong...
Moj kod na razie wyglada tak:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ASD
{
class Program
{
public static ulong Newton( uint n, uint k) // Funkcja obliczająca symbol newtona
{
double Wynik = 1; // Deklaracja zmiennej ( używamy double dla dokładności obliczeń )
for( uint i = 1; i <= k; i++) // Od 1 do k wykonujemy :
{
Wynik = Wynik * ( n - i + 1 ) / i; // Obliczanie ze wzoru iteracyjnego
}
return (ulong) Wynik; // Zwróć Wynik
}
public static ulong Catalan1(uint x)
{
ulong score = Newton(2 * x, x) / (x + 1);
return score;
}
static void Main(string[] args)
{
Console.WriteLine(Catalan1(34));
Console.ReadKey();
}
}
}
Dla wyrazu 34-tego program sie juz krzaczy... Macie jaki pomysl jak sobie poradzic z tym zakresem?