Array auf letzte Zahl ungleich 0 kürzen
-
@Swordfish sagte in Array auf letzte Zahl ungleich 0 kürzen:
Das letzte mal als ich gezählt habe hatte 0 eine Dezimalstelle. (Aber der Logarithmus für 0 ist undefiniert, deshalb stimmt auch das Ergebnis von laenge_zahl(0) nicht.)
Ja genau, dann bau ich in die laenge_zahl-Funktion eine if-Abfrage ein, die Falls die Zahl == 0 ist, 0 returned.
-
@quantix sagte in Array auf letzte Zahl ungleich 0 kürzen:
die Falls die Zahl == 0 ist, 0 returned.
@Swordfish sagte in Array auf letzte Zahl ungleich 0 kürzen:
Das letzte mal als ich gezählt habe hatte 0 eine Dezimalstelle.
-
@Swordfish
Ich denke das Problem liegt an der Arraylänge (laengearray, die in Zeile 110 berechnet wird, sie ist immer zu groß)Wenn ich in Zeile 115 die if-Abfrage änder in: " if(erg.folge[i] > 0) cout << erg.folge[i];"
also ">" statt ">=".
Dann verschwinden die 0-en, ABER leider auch die wichtigen:
9! = 362880
mein Programm sagt vor der Änderung: 9! = 08826300000000000
nach der Änderung: 9! = 88263
leider fehlt jetzt die 0 hinten
-
Du musst offensichtlich Nullen anders behandeln wenn zuvor schon eine andere Ziffer aufgetaucht ist.
-
for(int i=0; i<laengearray; ++i) if(erg.folge[i] > 0 || erg.folge[i+1] >0) cout << erg.folge[i];
mit einer Abfrage, die abfragt ob die Zahlstelle oder die nächste >0 ist klappt es.
Aber nur wenn die Ergebniszahl keine aufeinanderfolgenden 0-en hat.Aber das ist doch keine wirkliche Lösung, da müsste ich ja viele oder-Bedingungen einbauen bei 22! zum Beispiel wo es 3+ aufeinanderfolgende 0-en gibt
-
@Swordfish
Deine Lösung die du vorher geschrieben hast klappt. Danke für deine Hilfe.
Allerdings möchte ich es ohne Bibliotheken (die ich nicht kenne etc) schaffen.
-
Führende Nullen willst Du nicht ausgeben. Merk dir ob schon etwas anderes als Null aufgetaucht ist. Wenn ja: Nullen ausgeben.
-
Ich habe es gelöst.
Ich habe die Prozedur, welche den Array umdreht so verändert, dass sie zuerst die führenden 0-en zählt, bis sie die vorderste Zahl trifft, die != 0 ist.
Die neue Länge des Arrays ist die (Alte Länge minus 1 minus Anzahl der 0-en)
Daraufhin gibt die Prozedur nacheinander rückwärts die Arrayelemente aus und zwar so lange wie die neue Länge.void arraydreher(int arr[], int laenge) { int zaehler = 0;//Variable die die führenden 0-en zählt int help; //Hilfsvariable für die Länge help = laenge-1; while (arr[help] == 0){ ++zaehler; --help; } cout <<"Fuehrende 0-en:" << zaehler << endl; for (int i = laenge -1 -zaehler; i >= 0; --i) { cout << arr[i]; } }
Das Programm berechnet jetzt die Fakultät von 1 bis 115 korrekt, ab 116 stimmen die Ergebnisse nicht mehr, aber das ist mir jetzt egal.
-
also falls das noch keiner gesagt hat: du könntest ja auch einfach die anzahl der ziffern zählen und dann nur diese anzahl ausgeben.
-
@quantix sagte in Array auf letzte Zahl ungleich 0 kürzen:
@Swordfish
Deine Lösung die du vorher geschrieben hast klappt. Danke für deine Hilfe.
Allerdings möchte ich es ohne Bibliotheken (die ich nicht kenne etc) schaffen.Das ist die STL, wenn du die nicht kennst dann lerne sie schnellstmöglich.