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?
Überprüfen Sie Die Large Integer Fallstudie in C++.pdf von Owen Astrachan. Ich fand diese Datei mit ihrer detaillierten Einführung und Code-Implementierung äußerst nützlich. Sie verwendet keine Bibliothek eines Drittanbieters. Ich habe sie benutzt, um große Zahlen zu verarbeiten (solange man genug Speicher hat, um sie zu speichern). vector<char>
) ohne Probleme.
Idee : Sie implementiert eine Integer-Klasse mit beliebiger Genauigkeit, indem sie big int in einer vector<char>
.
vector<char> myDigits; // stores all digits of number
Dann werden alle Vorgänge im Zusammenhang mit dem großen int, einschließlich <<, >>, +, -, *, ==, <, !=, >, etc.
kann auf der Grundlage von Operationen an diesem char array
.
Geschmack des Codes : Hier ist die Header-Datei, die cpp-Datei mit den Codes finden Sie in der pdf-Datei.
#include <iostream>
#include <string> // for strings
#include <vector> // for sequence of digits
using namespace std;
class BigInt
{
public:
BigInt(); // default constructor, value = 0
BigInt(int); // assign an integer value
BigInt(const string &); // assign a string
// may need these in alternative implementation
// BigInt(const BigInt &); // copy constructor
// ~BigInt(); // destructor
// const BigInt & operator = (const BigInt &);
// assignment operator
// operators: arithmetic, relational
const BigInt & operator += (const BigInt &);
const BigInt & operator -= (const BigInt &);
const BigInt & operator *= (const BigInt &);
const BigInt & operator *= (int num);
string ToString() const; // convert to string
int ToInt() const; // convert to int
double ToDouble() const; // convert to double
// facilitate operators ==, <, << without friends
bool Equal(const BigInt & rhs) const;
bool LessThan(const BigInt & rhs) const;
void Print(ostream & os) const;
private:
// other helper functions
bool IsNegative() const; // return true iff number is negative
bool IsPositive() const; // return true iff number is positive
int NumDigits() const; // return # digits in number
int GetDigit(int k) const;
void AddSigDigit(int value);
void ChangeDigit(int k, int value);
void Normalize();
// private state/instance variables
enum Sign{positive,negative};
Sign mySign; // is number positive or negative
vector<char> myDigits; // stores all digits of number
int myNumDigits; // stores # of digits of number
};
// free functions
ostream & operator <<(ostream &, const BigInt &);
istream & operator >>(istream &, BigInt &);
BigInt operator +(const BigInt & lhs, const BigInt & rhs);
BigInt operator -(const BigInt & lhs, const BigInt & rhs);
BigInt operator *(const BigInt & lhs, const BigInt & rhs);
BigInt operator *(const BigInt & lhs, int num);
BigInt operator *(int num, const BigInt & rhs);
bool operator == (const BigInt & lhs, const BigInt & rhs);
bool operator < (const BigInt & lhs, const BigInt & rhs);
bool operator != (const BigInt & lhs, const BigInt & rhs);
bool operator > (const BigInt & lhs, const BigInt & rhs);
bool operator >= (const BigInt & lhs, const BigInt & rhs);
bool operator <= (const BigInt & lhs, const BigInt & rhs);
Wenn Sie Ihren eigenen Code für diesen Zweck erstellen möchten, versuchen Sie es mit Strings, um große Zahlen zu speichern ... Sie können dann grundlegende Operationen wie + - / * auf ihnen erstellen ... zum Beispiel -
#include <iostream>
using namespace std;
string add (string &s1, string &s2){
int carry=0,sum,i;
string min=s1,
max=s2,
result = "";
if (s1.length()>s2.length()){
max = s1;
min = s2;
} else {
max = s2;
min = s1;
}
for (i = min.length()-1; i>=0; i--){
sum = min[i] + max[i + max.length() - min.length()] + carry - 2*'0';
carry = sum/10;
sum %=10;
result = (char)(sum + '0') + result;
}
i = max.length() - min.length()-1;
while (i>=0){
sum = max[i] + carry - '0';
carry = sum/10;
sum%=10;
result = (char)(sum + '0') + result;
i--;
}
if (carry!=0){
result = (char)(carry + '0') + result;
}
return result;
}
int main (){
string a,b;
cin >> a >> b;
cout << add (a,b)<<endl;
return 0;
}
Sie möchten wissen, wie Sie die umfangreichen Eingaben, die Sie erhalten, bearbeiten können? Es gibt eine große Ganzzahl C++ Bibliothek (ähnlich wie Java), die es Ihnen ermöglicht, arithmetische Operationen durchzuführen...
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!!