Wie lassen sich große numerische Eingaben in C++ am besten verarbeiten (zum Beispiel 10^100
)?
Für Algorithmen wechsle ich normalerweise zu Ruby und verwende manchmal Strings.
Gibt es noch andere gute Methoden?
Wie lassen sich große numerische Eingaben in C++ am besten verarbeiten (zum Beispiel 10^100
)?
Für Algorithmen wechsle ich normalerweise zu Ruby und verwende manchmal Strings.
Gibt es noch andere gute Methoden?
Schauen Sie doch mal unter gmplib eine Bibliothek zur Verarbeitung von Zahlen beliebiger Genauigkeit für C und C++
Wenn Sie es genau haben wollen, brauchen Sie eine Bibliothek, die für große Zahlen ausgelegt ist. Java hat BigInt, das immer genau ist, egal wie viele Ziffern Sie es nehmen wollen, und bietet mathematische Operationen auf sie. Der gesamte Quellcode ist enthalten, Sie könnten ihn übertragen, aber das ist wirklich nicht die Art von Sache, für die C++ am besten geeignet ist - ich würde eine JVM-basierte Sprache und eine der Big-Bibliotheken verwenden.
Ich glaube nicht, dass ich Ruby dafür verwenden würde, es sei denn, Sie wollten, dass es langsam ist, und ich gehe davon aus, dass, da Sie über C++ sprechen, Geschwindigkeit etwas von einer Designüberlegung ist.
Erwägen Sie boost::cpp_int
#include <boost/multiprecision/cpp_int.hpp>
#include <iostream>
int main()
{
using namespace boost::multiprecision;
cpp_int u = 1;
for(unsigned i = 1; i <= 100; ++i)
u *= i;
// prints 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000 (i.e. 100!)
std::cout << u << std::endl;
return 0;
}
Nun, ich denke, der beste Weg, um eine solche arithmetische Berechnung zu tun, ist durch die Verwendung von Strings. Geben Sie die Eingabe als Kommandozeilenargumente ein und manipulieren Sie dann die gesamte Logik mit String-Funktionen wie atoi()
y itoa()
! Aber hey, kann man das auch für Multiplikation und Division machen? Ich denke, auf diese Weise strlen
der eingegebenen Zeichenfolgen ist für die Programmierung des Compilers nicht von Bedeutung, solange die Logik nicht in Ordnung ist.
Dies ist keine gute Lösung. Die Eingabe von Kommandozeilenargumenten macht Ihr Programm unbrauchbar, es sei denn, Sie machen eine Art Kommandozeilenrechner. Außerdem ist die Verwendung von ato*
Funktionen geht davon aus, dass Sie den gewünschten Datentyp bereits kennen UND dass sie im Standardpräzisionsbereich liegen werden. Es macht also keinen Sinn, Zeit mit der Konvertierung in diese Formate zu verschwenden, anstatt direkt in Ihr großes Zahlenformat, wenn Sie diese Zahlen nur noch einmal parsen müssen, vorausgesetzt, Sie haben sie überhaupt richtig eingelesen. itoa
ist auch nicht Teil der Standard-C++-Bibliothek.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Ich habe versucht, ein wenig Klarheit zu schaffen. Bitte korrigieren Sie mich, wenn ich etwas falsch interpretiert habe.
0 Stimmen
Danke Sir. danke für die Bibliothek .. aber ich möchte wissen, gibt es in einer anderen Methode der doin es?. ich meine, ohne spezifische stl 's für sie.. ich habe verknüpfte Liste verwendet!!