我正在制作一个小因子函数,以帮助我为函数做一些数学运算。
#include<iostream>
using std::cout;
using std::endl;
class HandsShaking{
private:
unsigned long long fac(int n){
return fac(n, 1);
}
unsigned long long fac(unsigned long long n, unsigned long long ret){
if(n == 1){
return ret;
}else{
return fac(n-1, ret*n);
}
}
public:
unsigned long long countPerfect(unsigned long long n){
unsigned long long m = n/2;
cout<<fac(n)<<endl;
cout<<(fac(m+1)*fac(m))<<endl;
return fac(n)/(fac(m+1)*fac(m));
}
};
我在任何地方使用尾递归和无符号长long,所以我怀疑它是溢出的。
很抱歉,我没有将功能和定义分开,但我的提交(计数完美功能)指定了一个文件。
该功能似乎适用于最多22个的所有数字,并且在所有数字之后都失败。
感谢。
答案 0 :(得分:0)
您可以使用Boost.Multiprecision执行此类任务。
#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
using boost::multiprecision::cpp_int;
cpp_int factorial(cpp_int x)
{
if (x == cpp_int{1}) return cpp_int{1};
return x*factorial(x-1);
}
int main()
{
cpp_int n{22};
std::cout << factorial(n) << '\n';
}