方法一:使用伽马函数
```c
include include int main() { double result = tgamma(21); // 计算21的阶乘,因为tgamma函数计算的是从1到n的阶乘 printf("1! * 2! * ... * 20! = %.0lf\n", result); return 0; } ``` 方法二:使用Y组合子(仅适用于C++14或更高版本) ```c++ include include const auto y = [] (const auto & f) { return [ & f ] (const auto & x) { return x ( x ); } ([ & f ] ( const auto & x ) -> std :: function return f ([ & x ] ( unsigned long long n ) { return n > 0 ? n * f ( n - 1 ) : 1 ; }); }); }; int main() { std::cout << y(almost_fac)(20) << std::endl; return 0; } ``` 方法三:递归方法 ```c include unsigned long long factorial(int n) { return n == 1 ? 1 : n * factorial(n - 1); } int main() { unsigned long long sum = 0; for (int i = 1; i <= 20; i++) { sum += factorial(i); } printf("1! + 2! + ... + 20! = %llu\n", sum); return 0; } ``` 方法四:迭代方法 ```c include int main() { unsigned long long sum = 0; for (int i = 1; i <= 20; i++) { unsigned long long factorial = 1; for (int j = 1; j <= i; j++) { factorial *= j; } sum += factorial; } printf("1! + 2! + ... + 20! = %llu\n", sum); return 0; } ``` 方法五:使用数学公式 ```c include int main() { double sum = 0; for (int i = 1; i <= 20; i++) { sum += i; } printf("1! + 2! + ... + 20! = %.0lf\n", sum); return 0; } ``` 这些方法各有优缺点,选择哪种方法取决于你的具体需求和编程环境。例如,如果你需要高精度计算,可以使用伽马函数;如果你使用的是C++14或更高版本,可以使用Y组合子。递归和迭代方法在C语言中更为常见,而数学公式则是一种简洁且高效的方法。