Fakultät n! berechnung
-
GPC schrieb:
Hallo,
die Fakultät kann man eigentlich ganz einfach folgendermaßen berechnen:
//Rekursiv unsigned FacultyR(unsigned N) { return (N!=1) ? N*FacultyR(N-1) : 1; }; //Iterativ unsigned FacultyI(unsigned N) { unsigned res=N; while (N!=1) res *= --N; return res; };
Wenn unsigned int nicht reicht, musst du halt in die Compiler-Doku schauen und herausfinden, was er dir an 64bit Ganzzahltypen anbietet (z.B. unsigned long long o.ä.).
MfG
GPC
Auf meinem PC bekomme ich bei diesem Verfahren bereits bei 13! einen overflow
-
Hallo,
ja, schon gut. Meine Originalbeispiele benutzen die GMP. Da ich aber davon ausgehen musste, dass der OP diese nicht hat, habe ich mich darauf beschränkt, den grundlegenden Ablauf zu zeigen.
MfG
GPC
-
das programm von dir funktioniert irgendwie nicht ganz. es bricht ab wenn ich eine zahl eingebe. ich habe versucht das programm zu überarbeiten aber ich habe es nur noch schlimmer gemacht. könntest du bitte nochmal schauen woran es liegen kann das wäre echt super.
-
hab hier noch ein programm geschrieben. ist eher so ein einfaches programm. ich kann bis 10! berechnen aber danach spinnt er. ich glaube es liegt daran das ich nicht genug speichplatz habe bzw. das nicht genügent speicherplatz reserviert ist. kann mir da einer helfen??
#include <iostream.h> #include <conio.h> 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; }
-
Das liegt einfach daran, das in ein int einfach keine Zahl größer als 10! reinpasst.
-
Mit unsigned long (4 Bytes) solltest bis 12! kommen. Mit unsigned long long (8 Bytes, Microsoft Compiler: unsigned __int64) bis 64!. Für alles was darüber hinausgeht zum Beispiel mit gmp.
Greetz, Swordfish
-
Swordfish schrieb:
Mit unsigned long (4 Bytes) solltest bis !12 kommen. Mit unsigned long long (8 Bytes, Microsoft Compiler: unsigned __int64) bis !64. Für alles was darüber hinausgeht zum Beispiel mit gmp.
Greetz, Swordfish
FYI: Das Ausrufezeichen kommt bei Fakultäten hinter der Zahl: 12!
-
@GPC: Besten dank, man .. ist .... ja ....... LERNFÄHIG *gggrrrrrr*
Greetz, Swordfish
-
markmilan schrieb:
das programm von dir funktioniert irgendwie nicht ganz. es bricht ab wenn ich eine zahl eingebe. ich habe versucht das programm zu überarbeiten aber ich habe es nur noch schlimmer gemacht. könntest du bitte nochmal schauen woran es liegen kann das wäre echt super.
bau einfach mal ein
getch();
vor der return Anweisung in der main ein, das sollte helfen (hast du bei deinem Programm ja auch gemacht ;))
-
Knecht schrieb:
bau einfach mal ein
getch();
vor der return Anweisung in der main ein, das sollte helfen (hast du bei deinem Programm ja auch gemacht ;))
ist weder ISO/IEC 9899:TC2 noch ISO-IEC 14882:1998.
Automatisches Schließen verhindern
Greetz, Swordfish