Domanda

Questo codice viene copiato da un'altra domanda utente e curioso come si accumula qui funziona qui. Ottengo il risultato corretto da questo codice, ma vorrei sapere quali parametri che LCM prende quando si è "accumulabile".Init come A e la somma della gamma come B?Per favore aiuto

#include <numeric>

int gcd(int a, int b)
{
    for (;;)
    {
        if (a == 0) return b;
        b %= a;
        if (b == 0) return a;
        a %= b;
    }
}

int lcm(int a, int b)
{
    int temp = gcd(a, b);

    return temp ? (a / temp * b) : 0;
}

int main()
{
    int arr[] = { 5, 7, 9, 12 };

    int result = std::accumulate(arr, arr + 4, 1, lcm);

    std::cout << result << '\n';
}
.

È stato utile?

Soluzione

Il primo argomento che lcm prenderà il valore accumulato finora (che inizia a 1, il terzo argomento di std::accumulate) e il secondo argomento sarà un elemento in arr.Successivamente, qualsiasi restituzione lcm è passata come primo argomento e il prossimo elemento in arr come secondo.

Vedi Un riferimento per maggiori dettagli.

È possibile scrivere facilmente a e b all'uscita standard all'interno lcm per vedere cosa sta succedendo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top