Wissenschaftliche Darstellung
-
Hallo,
ich habe ein Programm geschrieben, welches die Fakultät errechnen kann. Sobald ich jedoch die Fakultät von einer Zahl >= 10 errechnen möchte, zeigt er mir nur die wissenschaftliche (?) darstellung, sprich "3.6288e+006" anstatt 3628800. Hättet ihr eine Idee, woran dies liegen könnte?
mfg
Dennis
-
Schau dir mal "Manipulatoren" an...

-
klingt vielleicht doof, aber es müsste doch auch ohne gehen, oder?
Hier mein Code, damit es vielleicht einfacher fällt eine Hilfestellung zu geben#include <iostream> using namespace std; const int INT_OVERFLOW = -1; ////////////////////////////////////////////////// Überprüfung auf Ganzzahl ////////////////////////// double ganzZahl(double operand) { if((int)operand != operand) { return(0); }else { return(operand); } } ////////////////////////////////////////////////// Eingabehilfe ////////////////////////// void druckEingabeHilfe() // Dieses Programm gibt eine kleine Eingabehilfe aus. { cout << "Dieses Programm unterstuetz alle gaengigen Grundrechenarten.\n" << endl << "Die Bedienung:\nDurch Eingabe von c wird das Ergebnis auf 0 zurueckgesetzt" << endl << "Durch Eingabe von e wird das Programm beendet" << endl << "Durch den Operator ! wird die Fakultaet des jeweiligen Ergebnisses errechnet" << endl; } ////////////////////////////////////////////////// Fakultaet ////////////////////////// int fakultaet(int wert) { int fakul=1; int overflow; for(int i = 1; i<=wert; i++) { fakul = fakul * i; } overflow=fakul; for (wert;wert>= 1; wert--) { overflow = overflow/wert; } if(overflow != 1) return(INT_OVERFLOW); else return(fakul); } ////////////////////////////////////////////////// Potenz ////////////////////////// double potenz (double basis, double exponent) { double ergebnis = basis; double negativ = exponent; if (exponent < 0) exponent = exponent * (-1); while (exponent != 0) { for(int i = 1; i < exponent; i++) { basis = basis * ergebnis; } if (negativ < 0) return (1/basis); else return (basis); } return (1); } ////////////////////////////////////////////////// MAINFUNKTION ////////////////////////// int main() { double operand; double ergebnis=0; double KOoperand; char Operator; int fergebnis; druckEingabeHilfe(); cout<<"Berechnung"<<endl; cout<< ergebnis; do { cin >> Operator; switch(Operator) { case '+': cin >> operand; ergebnis=ergebnis+operand; cout << ergebnis; break; case '*': cin >> operand; ergebnis=ergebnis*operand; cout << ergebnis; break; case '-': cin >> operand; ergebnis=ergebnis-operand; cout << ergebnis; break; case '/': cin >> operand; if(Operator == '/' && operand == 0) { cout << "Keine Division durch 0\n"; }else { ergebnis=ergebnis/operand; } cout << ergebnis; break; case 'c': ergebnis = 0; cout << ergebnis; break; case 'e': break; case '!': if(ergebnis < 0.0) { cout << "Bitte natuerliche Zahl verwenden\n"; }else { KOoperand = ganzZahl(ergebnis); if(ergebnis != KOoperand) { cout << "Bitte natuerliche zahl verwenden\n"; }else { fergebnis = (fakultaet((int)ergebnis)); if (fergebnis == INT_OVERFLOW) { cout << "Zahl war zu gross, bitte kleinere Zahlen verwenden\n" << ergebnis; } else { ergebnis = fergebnis; cout << ergebnis; } } } break; case '^': cin >> operand; KOoperand = ganzZahl(operand); if(operand != KOoperand) { cout << "Ganzzahl verwenden\n"; }else { ergebnis = potenz((int)ergebnis, (int)operand); } cout << ergebnis; break; default: cin >> operand; cout << "Falsche Operation -> " << Operator << " " << operand << endl; cout << ergebnis; } }while(Operator != 'e'); }Bei einen anderen Komillitonen von mir geht es nämlich ohne und ich kann einfach keinen Unterschied finden

-
Hallo
Kein Wunder wenn du die Zahl als double ausgibst. Dabei gibt ja sogar deine Fakultät-Funktion int zurück, die Umwandlung in double ist gar nicht nötig.
bis bald
akari
-
oh man, genau! vielen Dank!

-
ehm gib mal bei deiner potenz-Funktion 0 ein.
Aja die FUnktionen kannst du dir auch einfach aus <cmath> nehmen ^^ std::pow ist power (Potenz) ...