Silnia powy?żej 12?

0

Miałem dzisiaj w szkole za zadanie napisać funkcję obliczającą silnię. Oczywiście zadanie banalne. Coś mnie jednak wzięło na ambicję i kombinuję nad tym, aby zrobić obliczanie silni z liczby powyżej 12. W pascalu się nie da tego zrobić ze względu na to, iż największy typ, czyli longint zmieści tylko 32 bity, czyli za mało, jak na silnię z 13 i więcej. Moje pytanie więc brzmi: czy jest jakiś algorytm na obliczanie silni po kawałku? Liczyłby jakiś kawałek, zapisywał do stringa (bo nie ma zmiennej, która by pomieściła całość), potem liczył kolejny kawałek, itd.

0

Jest. Piszesz własną funkcję mnożenia. Akurat mnożenie jest dosyć proste (dla z góry założonego max. rozmiaru zmiennej) w porównaniu do dzielenia. Opis jest np. w "The Art of Assembly Language".

0

http://4programmers.net/Forum/viewtopic.html?id=40238&p=0
Szkoda tylko , że poucinało część postów .

Duże liczby całkowite można traktować jako współczynniki wielomianów . np :
12 9876 0002 6000 0000 0054
dla systemu o podst x=10 można to przedstawić jako :
x21 + 2x20 + 9x19 + 8x18 + 7x17 + 6x16 + 2x12 + 6x11 + 5x + 4 .
Można też przyjąć za podstawę np x=10000 , wtedy :
12x5 + 9876x4 + 2x3 + 6000x2 + 54 .

Jeśli teraz zapamiętamy te liczby całkowite jako współczynniki wielomianów to będzie to banalne . Wystarczy tylko zapamiętać podstawę ( x ) wielomianu i poszczególne współczynniki np w tablicy .
Dodawanie i mnożenie tak zapisanych wielomianów to już formalność , trzeba pamiętać tylko o przeniesieniu .

0

spróbuj tego:http://4programmers.net/download.html?id=1184: możesz sobie zadeklarować liczbę o rozmiarze 4kB i liczyć sobie 1000! możesz tylko mieć problem z wypisaniem wyniku (szesnastkowo oczywiście), bo to będzie kilka ekranów...

/* Pół biedy wypisanie. Ile to będzie czasu liczyć ;) /
/
/* Sprawdź - liczy bardzo szybko, algorytm działa w czasie logarytmicznym, 1000! to mniej niż 10ms :d //

0

Dzięki za odpowiedzi. Na razie próbuję napisać funkcję mnożącą stringi metodą słupkową :).

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