C++大数阶乘算法改良
发布网友
发布时间:2022-04-22 22:05
我来回答
共1个回答
热心网友
时间:2023-07-06 06:42
largeint.h没有重载operator*,所以最后只能用加法来算阶乘。
理论上如果你重载了乘法运算的话时间复杂度会缩小为O(NlogN)。
至于说到如何修改,因为你的程序使用了vector容器,就要复杂一点。
由于我完全不会使用vector来进行高精度运算,代码我就不实现了。
如果要详细一点的话,
其一,largeint.h部分,不需要改动原来的代码,但是必须增加一个乘号的重载。具体地说就是你需要再写一个LargeInt类的子函数LargeInt operator*(const Largeint&) const,作用是把(*this)和arg相乘。
其二,主程序部分,factorial函数应该改成这样:
LargeInt factorial(LargeInt::inputtype n)
{
LargeInt result(1);
for (LargeInt::inputtype i = 2 ; i <= n ; ++i)
result = result * LargeInt(i);
return result;
}追问谢谢了我去试试看