前几天面试CVTE的时候,面试官要手撸了个题,求三个数的最小公倍数,题目很简单,当时想炫技说我可以求任意多个数的最小公倍数,还是忍住了,很长时间没看了,怕装逼失败。。。。。。
回来后简单写了下,使用variadic templates
,很简单,前面博客有介绍
代码如下:
/*
可变参数模板实现求n个数的最小公倍数,不考虑整形溢出
不考虑传入的b为0
*/
#include <iostream>
using namespace std;
int gcd(int a, int b) {
return a % b == 0 ? b : gcd(b, a % b);
}
template<class T, class... Args>
T lcm(T n, Args... args) {
return lcm(n, lcm(args...));
}
//特化
template<>
int lcm(int a, int b) {
return a * b / gcd(a, b);
}
int main() {
cout << lcm(1,2,3,4) << endl; //12
cout << lcm(2,5,6,8) << endl; //120
return 0;
}