Fakultät und Suchfunktion
-
Desert Storm schrieb:
Meine erste Frage ist, gibt es eine Funktion mit der ich die Fakültät einer Zahl berechnen kann? Wäre nämlich cool wenn ich mir dadurch ne Menge arbeit ersparen kann.
template<class NumType> NumType faculty(NumType value) // rekursiv { if(value == 1) return 1; else return value * faculty<NumType>(value - 1); }Desert Storm schrieb:
Meine zweite Frage ist oder mein zweites Problem. Ich hab eine Zahl die vom Typ double ist und 15 Stellen hat. Hab das Komma jetzt nich als extra Stelle gezählt. Also mit Komme 16. Und ich will jetzt diese Zahl vergleichen und sagen auf wie viel Nachkommastellen die genau ist. Hab mir gedacht ich les jede einzelne Stelle in ein Char ein und vergleich jede einzelne Stelle bis irgendwann eine Stelle ungleich der vorgegeben Stelle ist. Aber ich häng son bisschen an der Verwirklichung. Weiß net genau wie ich das umsetzen muss.
Hää? Du wilslt zwei Zahlen vergleichen? Wir wärs mit Minus rechnen? Wenn du wissen willst an welcher Stelle sie sich unterscheiden einfach den 10-er Logarithmus drauf.
-
Die Fakultät einer zahl ist ja wohl nicht sonderlich schwierig zu berechnen...
long double result=1; for(int i=1;i<=_limit;i++) { result*=i; } if(_limit=0)return 1; return i;greetz
chris90
-
Danke für die Fakultät. Und wie mache ich das mit dem log?? Gibt es dafür wenigstens eine Funktion die vorgegeben ist?? Und wenn ich jetzt die Zahl hab, mach ich da den log von und was kann ich mit der Zahl die rauskommt anfangen?
MFG
-
chris90 schrieb:
Die Fakultät einer zahl ist ja wohl nicht sonderlich schwierig zu berechnen...
Anscheinend doch ...

-
log10(a - b) rechnen und dann abrunden, das Ergebnis ist die Stelle an der sich die Zahlen unterscheiden.
Das ergebnis ist negativ, wenn der unterschied hinter der Komma ist sonnst positiv...Vorher noch nachschauen, ob a - b = 0 ist, bevor log berechnet wird
(kann es sein, dass bei positivem Ergebnis eine 1 drauf addiert werden muss?)
-
Mal ne dumme Frage. Aber wie runde ich?? Hab mit solchen Funktionen nich net gearbeitet

-
Und wenn ich schonmal hier bin brauch ich ne Funktion mit der ich ne double in einen CString konvertieren kann.
-
Piioo schrieb:
log10(a - b) rechnen und dann abrunden, das Ergebnis ist die Stelle an der sich die Zahlen unterscheiden.
Das ergebnis ist negativ, wenn der unterschied hinter der Komma ist sonnst positiv...das stimmt so nicht.. Nehmen wir einfach mal für a = 0.1 und b = 0.09999. Dann ist a-b = 0.00001 und log10(0.00001) = -5. Aber a und b unterschieden sich offensichtlich schon an der 1. Stelle nach dem Komma ..
-
Sollte so aussehen
int main() { double zahl1, zahl2; cin >> zahl1 >> zahl2; if(zahl1 == zahl2) { cout << "Die Zahlen sind gleich groß"; return 0; } if(zahl2 > zahl1) { swap(zahl1, zahl2); } double potenz = log10(zahl1 - zahl2); cout << "Die Zahlen unterscheiden sich an der "; if(potenz > 0) { cout << ceil(potenz) + 1 << ". Stelle."; } else { cout << - floor(potenz) << ". Stelle nach dem Komma"; } }
-
life schrieb:
Piioo schrieb:
log10(a - b) rechnen und dann abrunden, das Ergebnis ist die Stelle an der sich die Zahlen unterscheiden.
Das ergebnis ist negativ, wenn der unterschied hinter der Komma ist sonnst positiv...das stimmt so nicht.. Nehmen wir einfach mal für a = 0.1 und b = 0.09999. Dann ist a-b = 0.00001 und log10(0.00001) = -5. Aber a und b unterschieden sich offensichtlich schon an der 1. Stelle nach dem Komma ..
Sorry, hast recht.
Der Algorithmus zeigt nur in welchem Potenzbereich der Unterschied zwischen den Zahlen liegt...Sonnst koennte man immer eine Kommastelle mit der Anderen vergleichen.
Die Zahlen jeweils mit 10 multiplizieren und abrunden oder gleiche auf int casten (auf eine temp Variable).
Dann vergleichen, falls sie gleich sind, diese von den beiden Zahlen abziehen und wieder von vorne, bis das Ende der Zahl erreicht ist. Falls sie nicht gleich sind, muss nur noch ein Counter abgelesen werden.