Pergunta

Este código é copiado de outro usuário questão e estou curioso para saber como acumular funciona aqui.Eu obter o resultado correto, a partir desse código, mas gostaria de saber o que os parâmetros de lcm, quando em "acumular".O init como Um e a soma da série b?Por favor, ajuda

#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';
}
Foi útil?

Solução

O primeiro argumento que lcm vai tomar é o valor acumulado até então (que começa em 1, o terceiro argumento de std::accumulate), e o segundo argumento será um elemento em arr.Ao lado, o que lcm retorna é passado como o primeiro argumento e o elemento seguinte na arr como o segundo.

Ver uma referência para obter mais detalhes.

Você poderia facilmente escrever a e b para a saída padrão dentro lcm para ver o que está acontecendo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top