Problem mit int, long, double
-
Also so viel zum Programm:
Wenn die Zahl<10 = berechne Fakultät
Wenn die Zahl>10 = berechen Fakultät oder Quersumme
Wenn die Zahl>99 = berechne QuersummeDas problem ist aber das ich mit int und long keine fakultät von 56 berechnen kann.
Bei double wird er bei jeglichen Divisionsoperationen aus der Reihe springen, weil ich eigentlich mit ganzzahligen Typen rechnen will, double aber ein Fließkommadatentyp ist.hier der quelltext:
#include <iostream> #include <conio.h> //Funktions Prototypen zur Bekanntmachung ! int fakultaet (long); int quersumme(long); using namespace std; int main () { long fak=0,quer=0,zahl,eingabe; cout << "Mit diesem Programm koennen sie die Fakultaet oder die Qersumme berechnen : \n\n"<<endl; cout << "Bitte eine positive Zahl eingeben: "<<endl; cin >> zahl; if (zahl < 0) { cout << "Neg. Zahlen nicht unterstuetzt!"<< endl; } else { if (zahl>=100) { quer=quersumme(zahl); cout<<"Quersumme: "<<quer<<endl; } else { if(zahl>=10) { //also erstmal: ist egal ob zwei oder irgend eine andere zahl zwischen 2 und 32767 eingegeben wird es würde immer fak berehcnet werden.. //problem an der geschichte mit der fakultät ist die max größe von 32767 welche bereits bei 8! überschritten wird ! cout<< "Wollen sie die Quersumme(Option:1) errechnet haben, oder die Fakultaet(Option:2) der eingegeben Zahl?"<<endl; cin>>eingabe; if(eingabe==1) { quer=quersumme(zahl); cout<<"Quersumme: "<<quer<<endl; } else { fak=fakultaet(zahl); cout<<"Fakultaet: "<<fak<<endl; } } else { fak=fakultaet(zahl); cout<<"Fakultaet: "<<fak<<endl; } } system("PAUSE"); return 0; } } int fakultaet(long zahl) { long i,fakult; fakult = zahl; // i läuft von n bis zur 1 if (zahl == 0) { fakult = 1; } else { for (i=zahl-1;i>1; i--) { fakult = fakult * i; } } return fakult; } int quersumme (long zahl) { long quer = 0; while (zahl > 0) { quer+= zahl % 10; zahl /= 10; } return quer; }
-
Wenn man mit großen Zahlen rechnen will, gibt man auch nicht int als Rückgabetyp an

ansonsten mußt du schon selber überprüfen, ob und wie weit die Genauigkeit deines Systems mitspielt - ein integer-Überlauf zeigt sich normalerweise dadurch, daß du plötzlich bei negativen Werten landest oder die Werte kleiner werden.