Fakultät < Sonstiges < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 22:56 Fr 16.11.2012 | Autor: | Crashday |
Hey Leute,
ich soll bei dieser Aufgabe programmieren, dass der Benutzer die Zahl n eingibt und davon die Fakultät berechnet werden soll. Das habe ich auch ohne Probleme hinbekommen. Hier der Quellcode:
#include <iostream>
using namespace std;
void main()
{
double n,a,d,sum,b,i;
char eingabe, j='j';
do
{
cout<<"Geben Sie eine Zahl n ein: "<<endl;
cin>>n;
d = n;
b = 1;
sum = 0;
for (i=n; n>0; n--)
{
a = n * b;
b = a;
}
cout<<"Die Fakultaet von "<<d<<" lautet "<<b<<endl;
cout<<"Moechten Sie eine weitere Fakultaet berechnen? (j=ja)"<<endl;
cin>>eingabe;
}while (eingabe==j);
cout<<"Das Programm wird geschlossen."<<endl;
}
Leider habe ich jetzt aber die Schwierigkeit, dass es nur bei den Zahlen 0-9 funktioniert. Bei der 10 spuckt mir das Programm sowas aus: 3.6288e+006
Wie kriege ich das hin, dass das Programm mir auch Zahlen größer gleich 10 anzeigt? Vielen Dank für die Hilfe schonmal.
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 10:00 Sa 17.11.2012 | Autor: | Infinit |
Hallo Crashday,
die Ausgabe gefällt Dir wahrscheinlich nicht vom Format her, aber das Ergebnis ist doch richtig, wenn auch in Zehnerpotenzen angezeigt.
Viele Grüße,
Infinit
|
|
|
|
|
Hallo!
man kann das cout so manipulieren, daß die Zahlen auch größer werden:
1: |
| 2: | #include <iomanip>
| 3: |
| 4: | ...
| 5: |
| 6: |
| 7: | cout << "jetzt kommt ne lange Zahl: " << setw(20) << 12345678901234567890 << endl;
|
Hier wird mit setw(20) angegeben, daß Zahlen bis zu 20 zeichen lang sein dürfen. Positiver Nebeneffekt: Die Ausgabe ist immer 20 Zeichen lang, die Zahl wird rechtsbündig in diesen Bereich gesetzt.
Zu dem Code:
Wozu ist das
a = n * b;
b = a;
gut? Es reicht ein
b = b * n;
oder gar ganz kurz ein
b *= b;
Nochwas: die Variable CHAR j='j' brauchst du nicht. Du kannst direkt schreiben:
while (eingabe=='j')
Allerdings wirst du mit einem INT als Variable b auch nicht lange glücklich, da die Fakultäten sehr schnell sehr groß werden. Und das INT kann, da es nur 4 Byte groß ist, nur Zahlen von –2.147.483.648 bis +2.147.483.647 aufnehmen. Versuch mal ein UNSIGNED LONG LONG, das kann Zahlen von 0 bis 18.446.744.073.709.551.615 und gibt daher erst sehr viel später auf.
|
|
|
|