Proponuję Ci skorzystanie z funkcji:
sizeof(long long int);
sizeof(long double);
Aby zobaczyć ile bajtów zajmują w pamięci, na podstawie tych wartości będziesz mógł sprawdzić jak duże liczby mogą być przechowywane. Całkiem możliwe, że przekroczyłeś zakres, skoro wyniki stają się ujemne. Nigdzie nie jest powiedziane, że long double może przechowywać 300 cyfr, to zależy od Twojego kompilatora (a dokładniej od rozmiaru zmiennej jaki jej przydziela).
Edit: gdy dodajesz wartości typu int do long long int i long double powinieneś zrobić rzutowanie na te zmnienne:
wynik += (long double) liczba * n;
suma +=(long long int) liczba *n;
Mam też nadzieję, że gdy podajesz wartości liczba i n to nie wykraczasz poza zakres (możliwie największą) liczby dodatniej przez nie reprezentowaną (int), ponieważ przez to może pojawić się ujemny wynik.
PS. Używaj przycisku "code" gdy wstawiasz kod do posta. Szczegóły możesz znaleźć w FAQ forum.