如何在c++中实现阶乘函数并进行正确的错误处理



我之前问过这个问题,但是被不理解这个问题的人关闭了。我不是在寻找一个循环,我在寻找你如何为生产代码做它,比如参数和溢出的错误处理。

请不要只说"使用库X",除非你可以链接到该库的代码,并且它实际上解决了这些问题。

使用表查找。您不需要大表,因为阶乘将很快溢出64位双精度变量范围。您只需要为参数值从0到170存储函数值。

这取决于输入的域。

如果你使用的是32位或64位整数,你根本不应该使用循环:只使用查找表。可以用64位整数表示n!n并不多。对于查找表,检查溢出很容易:如果查找表中没有n的条目,则显然超出了范围。

如果输入大于此值,则可能会使用某种"大整数"类,并且溢出不太可能成为问题。

可能很简单:

unsigned factorial(unsigned n)
{
   if (n > theUpperThreshold)
      throw ExceptionFormYourMathLibrary("Explain that n! can't be represented by unsigned");
   return lookupTable[n];      
}

除非你的数学库也提供了一些大的整数类

最新更新