Các hàm trong chương trinh
UCLN2
template< class T> UCLN2(T a, T b);
Hàm này sẽ tính Ước chung lớn nhất cuả 2 số a,b
đây là toàn bộ code
#include <cstdio>
#include <cstdlib>
#include <cstdarg>
#include <iostream>
using namespace std;
#define CONCAT(name,type) name##_##type
#define CREATE(name,type) \
type CONCAT(name,type)(){\
type tmp;\
cin>>tmp;\
return tmp;\
}
CREATE(get,int)
CREATE(get,long)
CREATE(get,char)
CREATE(get,double)
CREATE(get,float)
template <class T>
T UCLN2(T a,T b){
if(a==0) return b;
return UCLN2(b%a,a);
}
template <class T>
T BCNN2(T a,T b){
return a*b/UCLN2(a,b);
}
template <class T>
T UCLN(int n,...){
T a,b;
va_list vl;
va_start(vl,n);
a=va_arg(vl,T);
for(int i=1;i<n;++i){
b=va_arg(vl,T);
a=UCLN2<T>(a,b);
}
return a;
}
template <class T>
T BCNN(int n,...){
T a,b;
va_list vl;
va_start(vl,n);
a=va_arg(vl,T);
for(int i=1;i<n;++i){
b=va_arg(vl,T);
a=BCNN2<T>(a,b);
}
return a;
}
int main(){
long a=BCNN<long>(3,get_long(),get_long(),get_long());
printf("%ld",a);
return 0;
}
##Edited:
- Mình vừa viết thêm đoạn macro để tiện cho input nó sẽ tạo ra các hàm get_int(),get_long(),get_float()…
#define CONCAT(name,type) name##_##type
#define CREATE(name,type) \
type CONCAT(name,type)(){\
type tmp;\
cin>>tmp;\
return tmp;\
}
CREATE(get,int)
CREATE(get,long)
CREATE(get,char)
CREATE(get,double)
CREATE(get,float)