Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.78 KB | None | 0 0
  1. // Template metaprogramming
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. template<size_t N, size_t M>
  6. struct KozosBitekSzama {
  7.   static const size_t value = (N%2 == M%2) ? 1+KozosBitekSzama<N/2,M/2>::value : 0+KozosBitekSzama<N/2,M/2>::value;
  8. };
  9.  
  10.  
  11. template<int N>
  12. struct KozosBitekSzama<N,0> {
  13.   static const size_t value = (N%2==0)?1:0;
  14. };
  15.  
  16. template<int N>
  17. struct KozosBitekSzama<0,N> {
  18.   static const size_t value = (N%2==0)?1:0;
  19. };
  20.  
  21. template<int N>
  22. struct KozosBitekSzama<N,1> {
  23.   static const size_t value = (N%2==0)?0:1;
  24. };
  25.  
  26. template<int N>
  27. struct KozosBitekSzama<1,N> {
  28.   static const size_t value = (N%2==0)?0:1;
  29. };
  30.  
  31. template<>
  32. struct KozosBitekSzama<1,1> {
  33.   static const size_t value = 1;
  34. };
  35.  
  36. template<>
  37. struct KozosBitekSzama<0,0> {
  38.   static const size_t value = 1;
  39. };
  40.  
  41.  
  42. template<int N, int M>
  43. struct Hatvany {
  44.   static const bool value = (M%N == 0) ? Hatvany<N,(M/N)>::value : false;
  45. };
  46.  
  47. template<int N>
  48. struct Hatvany<N,N> {
  49.   static const bool value = true;
  50. };
  51.  
  52.  
  53. template<>
  54. struct Hatvany<1,1> {
  55.   static const bool value = true;
  56. };
  57.  
  58. template<>
  59. struct Hatvany<0,0> {
  60.   static const bool value = false;
  61. };
  62.  
  63. template<int N>
  64. struct Hatvany<1,N> {
  65.   static const bool value = false;
  66. };
  67.  
  68. template<int N>
  69. struct Hatvany<N,1> {
  70.   static const bool value = (N==0)? false:true;
  71. };
  72.  
  73. template<int N>
  74. struct Hatvany<N,0> {
  75.   static const bool value = false;
  76. };
  77.  
  78.  
  79. int main() {
  80.    
  81.     cout << KozosBitekSzama<5, 3>::value << endl;
  82.     cout << KozosBitekSzama<0, 0>::value << endl;
  83.     cout << KozosBitekSzama<1, 1>::value << endl;
  84.     cout << KozosBitekSzama<32, 0>::value << endl;
  85.     cout << KozosBitekSzama<30, 31>::value << endl;
  86.     cout << KozosBitekSzama<32, 31>::value << endl;
  87.     cout << KozosBitekSzama<10, 16>::value << endl;
  88.    
  89.   return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement