Sto lavorando su un problema da CodeChef in cui ho bisogno di calcolare il fattoriale di n numeri.Fattoriale/i di N numeri per ciclo
L'utente immette un numero che determina il numero di inti per eseguire un calcolo fattoriale e quindi immette i numeri da calcolare.
Il mio problema è con la moltiplicazione stessa. Per esempio se ho un int == 5, allora il risultato sarà 20 (si calcolerà n dall'ultimo fattoriale unico, non per tutti)
Qui è dove il problema esiste:
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
}
}
Il ciclo esterno definisce il numero di calcoli da eseguire.
Il ciclo interno calula i fattoriali iterando attraverso ogni indice di _numberToProcess
e moltiplicandolo per ogni numero in meno rispetto al numero su cui calcolare.
Il problema è che il calcolo fattoriale stessa sovrascrive,
ad esempio:
fattoriale di 5 risultato: 20
ma dovrebbe essere 120 (essa si sovrascrive fino a raggiungere l'ultimo moltiplicatore)
Così ho provato quanto segue:
_result[x] = _numbersToProcess[x] *= y;
Questo è ovviamente la stessa di _numbersToProcess[x] = _numbersToProcess[x] * y;
Ma questo dà un risultato diverso completley:
Se abbiamo di nuovo ingresso 5 allora questo comporterà l'uscita di -1.899,959296 millions.
So che posso facilmente copiare e incollare da altri invii ma voglio sapere perché il mio metodo non risulta nell'output corretto.
Ecco il metodo nella sua interezza:
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();
Inizia risolvendo un problema più semplice. ** Puoi calcolare correttamente il fattoriale di un singolo numero? ** Se non puoi farlo, non puoi calcolare i fattoriali di più numeri. Cancella tutto e ricomincia; crea un programma che faccia qualcosa * semplice * e poi * provi a discuterne * finché non sei sicuro che sia corretto. Quindi, una volta che hai una solida base di codice corretto su cui lavorare, ** usa il codice corretto come strumento per implementare una soluzione al problema più complesso. ** Ecco come costruiamo programmi complessi: costruendo solidi piccoli programmi. –