Faktor (e) von N Zahlen in for Schleife

8

Ich arbeite an einem Problem von CodeChef , wo ich die Fakultät von n Zahlen berechnen muss.

Der Benutzer gibt eine Zahl ein, die festlegt, für wie viele Eingaben eine faktorielle Berechnung ausgeführt werden soll, und gibt dann die zu berechnenden Zahlen ein.

Mein Problem ist mit der Multiplikation selbst. Wenn ich zum Beispiel ein int == 5 habe, dann ist das Ergebnis 20 (es wird n nur von der letzten Fakultät berechnet, nicht von allen)

Hier ist das Problem:

%Vor%

Die äußere Schleife definiert, wie viele Berechnungen durchgeführt werden sollen.

Die innere Schleife berechnet die Faktoren, indem sie durch jeden Index von _numberToProcess iteriert und mit jeder Zahl multipliziert, die kleiner ist als die Zahl, auf die berechnet werden soll.

Das Problem ist, dass die faktorielle Berechnung sich selbst überschreibt,

zum Beispiel:

faktorial von 5 result: 20 aber es sollte 120 sein (es überschreibt sich selbst, bis es den letzten Multiplikator erreicht hat)

Also habe ich folgendes versucht:

%Vor%

Dies ist offensichtlich dasselbe wie _numbersToProcess[x] = _numbersToProcess[x] * y;

Aber das ergibt ein völlig anderes Ergebnis:

Wenn wir wieder 5 eingeben, ergibt dies die Ausgabe von -1899959296.

Ich weiß, dass ich leicht aus anderen Einreichungen kopieren und einfügen kann, aber ich möchte wissen, warum meine Methode nicht zur korrekten Ausgabe führt.

Hier ist die Methode in ihrer Gesamtheit:

%Vor%     
AnonDCX 29.01.2016, 06:57
quelle

5 Antworten

3
%Vor%

Problem ist mit Ihrer inneren for-Schleife. Hier überschreiben Sie immer das Ergebnis-Array.

d.h. für y = 5;    Die innere for-Schleife wird 5 mal ausgeführt.

%Vor%

es geht also für 12 Iteration als Ihr _numbertoprocess [5] ändert und stoppt, sobald es weniger als 0 erreicht, z. B. -1899959296.

%Vor%

i.e. Sie ändern numbertoprocess jedes Mal in Ihrer inneren for-Schleife.

Sie können es überprüfen, indem Sie

hinzufügen %Vor%

in Ihrer inneren for-Schleife.

    
Sahi 29.01.2016, 07:17
quelle
1
%Vor%

Im Schleifenzustand y < _numberToProcess[x]; . Es vergleicht zwischen y und _numberToProcess[x] Array-Wert

Ich denke, Sie sollten die Schleifenbedingung in y < x

ändern

Sei glücklich.

    
Monkawee Maneewalaya 29.01.2016 07:36
quelle
0

Hier verwende ich eine rekursive Funktion factorial

%Vor%     
Sanu Antony 29.01.2016 08:03
quelle
-1
%Vor%     
Soniya Yadav 29.01.2016 07:21
quelle
-2

Sieh dir das an, vielleicht hilft es ...

%Vor%     
TheFirefly 29.01.2016 08:28
quelle