2016-09-08 1 views
4

Ich habe eine sehr große Anzahl:square_root sehr große Zahl in C bis <1000

char *big_numbr_str = "4325242066733762057192832260226492766115114212292022277"; 

I Radizierung diese Nummer behalten will, bis es < 1000. In PHP ist, kann ich dies tun kann relativ einfach:

Ich versuche jetzt, das gleiche in C zu erreichen, um mit dem gleichen Ergebnis zu enden. Als Referenz, nach 5 Zyklen in der while-Schleife, ist das Endergebnis in PHP aus dem obigen Snippet + Startnummer 50; Wenn Sie diese Zahl 5-mal an einer anderen Stelle setzen, sollten Sie ein ähnliches Ergebnis erhalten, abgerundet.

Wie würde ich das gleiche in Ebene C erreichen? Scheint das Speichern einer Nummer dieser Größe ist in C komplexer als erwartet.

Antwort

4

Sie benötigen eine große Nummernbibliothek, um Zahlen wie diese zu behandeln. Unter Linux können Sie versuchen GMP.

Alternativ können Sie Ihre eigene Bigint-Routine schreiben und Quadratwurzel manuell implementieren. Dies wird einige Zeit dauern, um richtig zu implementieren, wie Sie im Grunde die ganze Mathematik von Hand eine Ziffer nach dem anderen tun müssen. Es kann getan werden (ich habe es getan), aber es wird nicht "einfach" sein.

+0

Könnte die "relativ einfache" Mathematik der Quadratwurzelung mit der in einem Zeichen gespeicherten Zahl gemacht werden? – Tiago

+0

Ja, Sie können: Nehmen Sie die linke Hälfte der Zeichenfolge, und nehmen Sie einige Korrekturen vor. wiederhole, bis der restliche Teil <1000 (<4 Zeichen) ist. – wildplasser

+0

Scheint mit GMP zu arbeiten, danke! Obwohl ich immer noch interessiert wäre zu hören, ob es einen rohen C-Ansatz gibt, ohne GMP zu verknüpfen. – Tiago

0

Um eine so große Ganzzahl (4325242066733762057192832260226492766115114212292022277) zu speichern, können Sie array of integers verwenden, speichern Sie eine einzelne Ziffer pro Element. Das Array sollte sich wie eine einzelne ganze Zahl verhalten. Schreibe die Routinen, um die Berechnung durchzuführen (wie in einem Stück Papier).

Alternativ googlen Sie bignum c, und sehen Sie, ob Sie eine Bibliothek finden können, die große Ganzzahlarithmetik implementiert. Werfen Sie einen Blick auf bignum.c von Steven Skiena, Bibliotheken wie MPFR und MPIR.