fork(1) download
  1. #include <iomanip>
  2. #include <iostream>
  3. #include <vector>
  4. #include <cmath>
  5. #include <thread>
  6. #include <chrono>
  7. #include <atomic>
  8.  
  9. using namespace std;
  10.  
  11. typedef unsigned long long ull;
  12.  
  13. #define DBG(x) { cout << left << setw(30) << #x << (x) << endl; }
  14.  
  15. template <int N>
  16. struct Silnia{
  17. enum { value = N * Silnia<N-1>::value };
  18. };
  19.  
  20. template <>
  21. struct Silnia<0>{
  22. enum { value = 1 };
  23. };
  24.  
  25. template<char c>
  26. struct adjust_ascii{
  27. static constexpr int value = c - '0';
  28. };
  29.  
  30. constexpr ull power(ull base, ull exp){
  31. return exp ? power(base,exp-1) * base : 1;
  32. }
  33.  
  34. template<ull First, ull... Others>
  35. struct to_val{
  36. static constexpr ull exec(){
  37. return First*power(10,sizeof...(Others)) + to_val<Others...>::exec();
  38. }
  39. };
  40.  
  41. template<ull Last>
  42. struct to_val<Last>{
  43. static constexpr ull exec(){
  44. return Last;
  45. }
  46. };
  47.  
  48. template <char... Cs>
  49. constexpr ull operator"" _silnia(){
  50. return Silnia<to_val<adjust_ascii<Cs>::value...>::exec()>::value;
  51. }
  52.  
  53.  
  54. auto main() -> int
  55. {
  56. DBG(1_silnia);
  57. DBG(2_silnia);
  58. DBG(3_silnia);
  59. DBG(4_silnia);
  60. DBG(5_silnia);
  61. DBG(6_silnia);
  62. DBG(7_silnia);
  63. DBG(8_silnia);
  64. DBG(9_silnia);
  65. DBG(10_silnia);
  66. DBG(11_silnia);
  67. DBG(12_silnia);
  68. }
  69.  
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
1_silnia                      1
2_silnia                      2
3_silnia                      6
4_silnia                      24
5_silnia                      120
6_silnia                      720
7_silnia                      5040
8_silnia                      40320
9_silnia                      362880
10_silnia                     3628800
11_silnia                     39916800
12_silnia                     479001600