Программа ниже вычисляет НОК двух чисел, ожидаемый результат — 216 при вводе 54 и 24, но я получаю 57.
Может кто-нибудь помочь с тем же, и дайте мне знать, что не так с фрагментом кода ниже.
/* *********** /
*** LCM ******/
/**************/
template<bool cond, int V1, int V2>
struct IfCond
{
enum
{
value = V1
};
};
template<int V1, int V2>
struct IfCond<0, V1, V2>
{
enum
{
value = V2
};
};
template<int V1, int V2>
struct findMax
{
enum
{
result = V1 > V2,
value = IfCond<result, V1, V2>::value
};
};
template<int V1, int V2, int max>
struct findLCM
{
enum
{
result = findLCM<max % V1, max % V2, max+1>::result
};
};
template<int V2, int max>
struct findLCM<0, V2, max>
{
enum
{
result = findLCM<0, max % V2, max+1>::result
};
};
template<int V1, int max>
struct findLCM<V1, 0, max>
{
enum
{
result = findLCM<max % V1, 0, max+1>::result
};
};
template<int max>
struct findLCM<0, 0, max>
{
enum
{
result = max
};
};
int main()
{
std::cout<< findLCM<54, 24, findMax<54, 24>::value>::result << std::endl;
}
findLCM<54, 24, <findMax<54,s4>::value>> = findLCM<54,24,54> => findLCM<54%54, 54%24, 55> == findLCM<0,6,55> => findLCM<0,55%6, 56> == findLCM<0,1,56> => findLCM<0,56%1, 57> == findLCM<0,0,57> => 57
Две проблемы, которые я вижу: вы используете алгоритм Эйлера для GCD, и вы поняли его (немного) неправильно. - person Martin Bonner supports Monica   schedule 29.03.2016