Ich arbeite an einem Problem von CodeChef, wo ich die Fakultät von n Zahlen berechnen muss.Faktor (e) von N Zahlen in for Schleife
Der Benutzer gibt eine Zahl ein, die festlegt, wie viele Eingaben eine faktorielle Berechnung ausführen soll, und gibt dann die zu berechnenden Zahlen ein.
Mein Problem ist mit der Multiplikation selbst. Zum Beispiel, wenn ich einen int == habe 5 dann wird das Ergebnis sein, 20 (nur n von den letzten faktorielles berechnen wird, nicht alle von ihnen)
Hier ist, wo das Problem weiterhin besteht:
for(int x = 0; x < _numbersToProcess.Length; x++) {// Loop throuigh Array by index
for (int y = 1; y < _numbersToProcess[x]; y++) {// Y is equal to less than index x
_result[x] = _numbersToProcess[x] * y;// Multiply x by y then add to array
}
}
Die äußere Schleife definiert, wie viele Berechnungen durchgeführt werden sollen.
Die innere Schleife berechnet die Faktoren durch Iteration durch jeden Index von _numberToProcess
und multipliziert sie mit jeder Zahl, die kleiner als die Zahl ist, auf der berechnet werden soll.
Das Problem ist, dass die faktorielle Berechnung überschreibt selbst
zum Beispiel:
faktoriellen von 5 Ergebnis: 20
aber es sollte 120 (überschreibt es sich, bis sie den letzten Multiplizierer erreicht) sein
Also versuchte ich folgendes:
_result[x] = _numbersToProcess[x] *= y;
Dies ist offensichtlich der gleiche wie _numbersToProcess[x] = _numbersToProcess[x] * y;
Aber das gibt ein completley anderes Ergebnis:
Wenn wir wieder Eingang 5 dann diese in der Ausgabe von -1899959296 führen.
Ich weiß, ich kann einfach kopieren und einfügen von anderen Einreichungen, aber ich möchte wissen, warum meine Methode nicht in der richtigen Ausgabe führt. Hier
ist das Verfahren in seiner Gesamtheit:
int _numbers = int.Parse(Console.ReadLine());// Get number of ints to calculate
int[] _numbersToProcess = new int[_numbers];// Array of inputs
int[] _result = new int[_numbers];
int i = 0;
while(i < _numbersToProcess.Length) {
_numbersToProcess[i] = int.Parse(Console.ReadLine());
i++;
}
for(int x = 0; x < _numbersToProcess.Length; x++) {// Loop throuigh Array by index
for (int y = 1; y < _numbersToProcess[x]; y++) {// Y is equal to less than index x
_result[x] = _numbersToProcess[x] *= y;// Multiply x by y then add to array
}
}
for (int n = 0; n < _result.Length; n++) {// Y is equal to less than index x
Console.WriteLine(_result[n]);// Write to console
}
Console.ReadLine();
starten durch ein einfacheres Problem zu lösen. ** Können Sie den Faktor einer einzelnen Zahl korrekt berechnen? ** Wenn Sie das nicht können, können Sie die Faktoren mehrerer Zahlen nicht berechnen. Lösche alles und fange neu an; Mach ein Programm, das etwas * einfach * macht und dann * teste es aus * bis du sicher bist, dass es korrekt ist. Sobald Sie über eine solide Basis an korrektem Code verfügen, verwenden Sie den richtigen Code als Werkzeug, um eine Lösung für das komplexere Problem zu implementieren. So bauen wir komplexe Programme: durch die Erstellung solider kleiner Programme. –