Welche Parameter nimmt diese Formel an, wenn sie „akkumuliert“ ist?
-
21-12-2019 - |
Frage
Dieser Code wurde aus einer anderen Benutzerfrage kopiert und ich bin gespannt, wie die Akkumulierung hier funktioniert.Ich erhalte mit diesem Code das korrekte Ergebnis, möchte aber wissen, welche Parameter lcm bei „Akkumulieren“ annimmt.Der Init als A und die Summe des Bereichs als b?Bitte helfen Sie
#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';
}
Lösung
Das erste Argument, das lcm
wird nehmen ist der bisher akkumulierte Wert (der beginnt bei 1
, das dritte Argument von std::accumulate
), und das zweite Argument wird ein Element in sein arr
.Als nächstes, was auch immer lcm
return wird als erstes Argument und als nächstes Element in übergeben arr
als Zweiter.
Sehen eine Referenz für mehr Details.
Man könnte leicht schreiben a
Und b
zur Standardausgabe im Inneren lcm
um zu sehen, was passiert.