Ich hab zwar gerade erst mit C++ angefangen aber reicht folgendes nicht einfach aus?
#include <iostream> using namespace std; int main(int nNumberofArgs, char* pzArgs[]) { int nEin; cout<<"Geben Sie n ein: "; cin>>nEin; long double nZaeler=1; for (int i=1;i<nEin+1;i++) { nZaeler*=(long double)i; cout<<"!"<<i<<"= "<<nZaeler<<"\n"; } return 0; }
Was mich aber wirklich interessiert ist was genau
using namespace std; und (int nNumberofArgs, char* pzArgs[])
machen(bin soweit mit meinem C++Kursbuch noch nicht aber würde es jetzt schon gern wissen)?
Du musst die Fakultät noch zur Laufzeit ausrechnen. Der Trick an diesem template-Geschichten ist, dass der Compiler den Laufzeitoverhead schon zur Compilezeit wegoptimiert, so dass zur Laufzeit im wesentlichen noch dasteht
Virtual zieht das noch ne Ecke weiter und schreibt sich im Grunde einen eigenen Präprozessor, der die Fakultäten bis 1000! ausrechnet und als String-Konstanten in die cpp-Datei einfügt.
Neben dem von beefy genannten Problem ist Dein Ansatz noch in anderweitiger Hinsicht Problematisch: Nehmen wir mal an, Du wolltest mit Deinem Program nun - ähnlich wie ich - 1000! ausrechnen. Ich vermute mal ganz kräftig, daß Deine Ergebnisse sehr ungenau werden würden. Die Genauigkeit von long double läßt zu wünschen übrig. Der Wertebereich von Fließkommazahlen mag zwar gigantisch sein, aber meistens ist bei spätestens 15-16 nachkommastellen Sabbat was die Verläßlichkeit angeht. Eigentlich mal ein FAQ wert -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21)