C++ Programmierung Fakultät

Shadehunter

Banned
Thread Starter
Mitglied seit
08.12.2010
Beiträge
110
Servus leute

Ich habe ein programm erstellt, indem er die Fakultät von n und k berechnen soll. Aber irgendwie gibt er mir nur eine Fakultät aus, obwohl ich Ihm sage, er soll doch bitte beide ausgeben. Kann mir bitte jemand bei meinem Denkfehler helfen?


Hier mal das Listing:

Code:
#include<iostream>

using namespace std;

int main()

{
int k,n,fakultaet=1,faku=1;

cout<<"Ein Programm zum Berechnen einer Variation ohne Wiederholungen"<<endl;
cout<<"Bitte geben sie den Wert fuer k ein";
cin>>k;
cout<<"Bitte geben sie den Wert fuer n ein";
cin>>n;
{for(int i=k;i>0;i--)
    fakultaet=fakultaet*i;
    cout<<"Das Ergebniss ist"<<fakultaet;}



    {for(int a=n;n>0;a--)
        faku=faku*a;
        cout<<"Das ergebniss ist"<<faku;}



return 0;

}


Irgendwie will er mir die 2te einfach ned ausgeben



Fehler gefunden :d

Aber ich habe noch mehr mit dem programm vor, es soll nämlich folgende Formel berechnen können:

___n!____
. (n-k)!

---------- Post added at 22:11 ---------- Previous post was at 21:54 ----------

okay folgendes Problem:

ich möchte die Fakultät von hohen zahlen wir 20,30 oder 75 berechnen,

Habe auch k und n mit double bezeichnet, da double das höchste an zahlen mit bits ist, oder wie das hier heist, fälllt mir grad ned ein^^

kriege aber sobal ich 17! mache, ein minus vor die zahlen.

Kann ich das irgendwie ändern?


hier neues listing

Code:
#include<iostream>

using namespace std;

int main()

{
double k,n;
int fakultaet=1,faku=1;

cout<<"Ein Programm zum Berechnen einer Variation ohne Wiederholungen"<<endl;
cout<<"Bitte geben sie den Wert fuer n ein";
cin>>n;
cout<<"Bitte geben sie den Wert fuer k ein";
cin>>k;
{for(int i=n;i>0;i--)
    fakultaet=fakultaet*i;
    cout<<"Das Ergebniss fuer n ist"<<fakultaet;}



    {for(int a=k;a>0;a--)
        faku=faku*a;
        cout<<"\nDas ergebniss fuer k ist"<<faku<<endl;}



return 0;

}
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Double ist der falsche Zahlentyp, oder seit wann gibt es bei Fakultäten Nachkommastellen?
Ich würde es mal mit Long/Long Int versuchen. Weiter als bis 20! wirst du damit aber auch nicht kommen, denn das ist ein 64bit-Wert und bei 21! würdest du den Wertebereich überschreiten.
Wenn es einen 128bit-Datentyp gibt, würde ich den nehmen.
Damit kommst du dann immerhin bis 32!
 
Was sollen eigentlich die geschweiften Klammern um die For-Schleife und den Teil danach?

Mehr als (2[SUP]64[/SUP])-1 (18446744073709551615) wirst du nicht so leicht bekommen. Möglicherweise hat dein Compiler da spezielle Datentypen, aber normal wird so etwas im Allgemeinen von C++ nicht unterstützt. Du könntest dir eine spezielle Bibliothek einbinden, mit denen mit fast beliebig großen Zahlen gerechnet werden kann. Das geht aber definitiv über den Schwierigkeitsgrad einfacher Fakultäten hinaus, da muss man sich schon etwas mehr mit C++ auseinander setzen. ;)
 
Thread ist zwar fast schon als "älter" anzusehen, aber nachdem ich selbst mal ein Programm geschrieben habe, welches mir die höchste bekannte Primzahl berechnet hat (wo man genau dieses "zu große Zahlen"-Problem hat):
Mein Programm damals war in C# geschrieben, welches "nativ" über eine BigInt-Komponente verfügt. Für C++ gibt es https://mattmccutchen.net/bigint/. Angemerkt sei, dass solche Systeme ziemlich auf die Rechenleistung gehen und nicht optimierte Algorithmen sich da auch relativ lahm verhalten.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh