Pięknie i może, ale czy poprawnie? Policzyłeś ręcznie i sprawdziłeś
Zobacz jak to pięknie robi: http://ideone.com/GYbvnO255
Ustawienie cout << setprecision(1000); spowoduje Ci tylko wyświetlenie odpowiedniej ilości cyfer, ale wcale nie znaczy, że będą to dokładne wartości. Przy long doble, gdzieś tak 20 znaczących [o ile dobrze pamiętam[ a reszta to śmieci, a dodatkowo, przy niektórych kombinacjach danych i tak sypie wartościami po przecinku. Autor zadania zapewnia, że wynik nie będzie większy od 1 000 000 000 [typ int wystarcz] ale po drodze pewnie pojawiają się w twoim algorytmie, przekłamania [błędy zaokrągleń zmiennoprzecinkowych].
A duże wartości możesz zobaczyć i sprawdzić np tu: http://www.wolframalpha.com/input/?i=binomial+%28+1000%2C+12%2998 wpisując w pomarańczową ramkę dowolne wartości [ale pewnie bez przesady], taki sobie po[d]ręczny kalkulator.
Dwumian to liczba całkowita, a licząc na typie double, czy long double uzyskasz jakiś wynik przybliżony, dla małych wartości z bardzo małym [pomijalnym] błędem dla ogromnych z dużym. Mam na myśli ilość cyfr znaczących.
PS
Na pocieszenie, pewien bloger, autor kilku ciekawych kursów programowania, prowadzący interesujący i wartościowy blog ale nie pozbawiony błędów. Międy innymi przedstawia swój program do liczenia wielkiech liczb fibonacciego i niestety też z tym samym, co twój, błędem.