Этот код скопирован из другого пользовательского вопроса, и мне любопытно, как работает накопление здесь.
Я получаю правильный результат из этого кода, но хотел бы знать, какие параметры принимает lcm, когда он «накапливается». Init как A и сумма диапазона как b? Пожалуйста помоги
#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';
}
Первый аргумент, что lcm
примет это накопленное значение до сих пор (который начинается в 1
третий аргумент std::accumulate
), а вторым аргументом будет элемент в arr
, Далее, что угодно lcm
Возвращается как первый аргумент и следующий элемент в arr
как второй.
Увидеть ссылка Больше подробностей.
Вы могли бы легко написать a
а также b
на стандартный вывод внутри lcm
чтобы увидеть, что происходит.
Других решений пока нет …