Fakultät für 100 berechnen

  • Themenstarter Themenstarter Neuling 765
  • Beginndatum Beginndatum
N

Neuling 765

Hallo zusammen ich brauche dringent hilfe beim Programieren. Ich bin im Programieren ein ziemlicher neuling und soll ein programm schreiben für die Exakte berechnung von n! und das für große n wie zB 100.

Die Vorgaben: 1. statt datentyp int eigenen datentyp zahl verwenden (beliebig lange positive ganzzahlige Dezimalzahlen).
2. für die implementierung ein Feld mit Läng 1000 oder aber strings mit Dezimalziffern verwenden.
3. für Datentyp zahl soll man dan die Addition und Multiplikation implementieren, um damit in einer schleife n! zu berechnen.

bis jetzt kann ich zwar normle fakultäten mit int berechnen aber nicht bis 100.

Das hab ich bis jetzt:

int main()
{
cout << "Geben Sie eine Zahl ein: ";
int Zahl;
cin >> Zahl;
int x = Zahl-1;
int Res = Zahl;
while (x > 1)
{
cout << Res << " * " << x << " = " << Res * x << endl;
Res *= x;
x--;
}
cout << "Die Fakultaet von " << Zahl << " ist: " << Res;
getch();
return 0;
}


Ich hoffe man kan mir helfen... internet und bücher hab ich natürlich auch schon dürchgewühlt.
Danke schon mal im vorraus.

man da kommt man sich sehr dumm vor^^
 
Naja, das Problem ist mit C/C++ nicht so trivial, wie es zunächst aussehen mag. Du hast nämlich ein Problem: int ist signed 16 bit und hat damit einen Wertebereich von -2147483648 bis 2147483647. Damit kannst du AFAIK die Falkultät von 100 nicht berechnen. Etwas weiter kommst du, wenn du einen unsigned int daraus machst. Das reicht aber immer noch nicht. Selbst mit unsigned long long (2^64) kommst du da nicht hin. Die Fakultät von 100 ist sehr groß (158 Stellen). Das kannst du mit keinem primitiven Datentypen darstellen.

Du kannst es aber mit GMP machen, wenn das erlaubt ist.

Edit: Das nächste mal bitte Code-Tags für die entsprechende Sprache setzen. In deinem Falle [ code=cpp ]...[ /code ] (ohne leerzeichen). Liest sich dann besser.
 
Zuletzt bearbeitet:
Du sollst eine neue Klasse zahl schreiben, die Methoden für das Addieren und Multiplizieren anbietet. Für die interne Zahlendarstellung verwendest du am besten ein int-Array; short int reicht. In jedem Element des Arrays speicherst du dann eine Stelle der Zahl. Außerdem musst du dir noch merken, wieviele Stellen deine Zahl momentan hat. Und du brauchst natürlich auch eine Methode, mit der du deiner Zahl einen Wert zuweisen kannst. Den übergibst du dann als Ziffernstring. Zum Schluss brauchst du natürlich auch noch eine Methode, die dir die Zahl als Ziffernstring liefert, damit du sie auch ausgeben kannst. Die Deklaration sollte also so aussehen.
C++:
class zahl
{
  private:
  int stelle[1000];
  int laenge;
  
  public:
  zahl();
  zahl(string ziffern);
  zahl(zahl z); // Kopier-Konstruktor (optional, aber nützlich)
  zahl Add(zahl z); // Addieren
  zahl Mal(zahl z); // Multiplizieren
  void Set(string ziffern); // Setzen eines neuen Wertes
  string toString(); // Ausgeben des aktuellen Wertes
};
Und noch zwei Tipps:
1. Die Anzahl der Stellen des Resultates einer Addition ist so groß wie die Anzahl der Stellen der längsten Zahl oder eins mehr (bei Übertrag).
2. Die Anzahl der Stellen des Resultates eine Multiplikation ist so groß wie die Summe der Stellenanzahl von Multiplikand und Multiplikator oder eins weniger.
Damit kannst du überprüfen, ob du genügend Platz für das Ergebnis hast.

PS: und verwende bitte die Code-Tags cpp und /cpp (natürlich in eckige Klammern gesetzt).
 
Zuletzt bearbeitet:
Danke das hat mir etlich den richtigen denkanstoß gegeben...
proramm ist fertig
 
Zurück