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.
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".
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 .
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 //
Dzięki za odpowiedzi. Na razie próbuję napisać funkcję mnożącą stringi metodą słupkową :).