如何通过适当的错误处理在C ++中实现阶乘函数?

时间:2011-04-21 23:45:49

标签: c++

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

请不要只说“使用库X”,除非您可以链接到所述库的代码,它实际上解决了这些问题。

3 个答案:

答案 0 :(得分:9)

使用表格查找。你不需要大表,因为factorial会很快溢出64位双精度变量范围。您只需要存储从0到170的参数值的函数值。超出该范围的任何内容都应该生成错误。

答案 1 :(得分:6)

这取决于输入的域名。

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

如果输入大于那个,那么可能你会使用某种“大整数”类,溢出不太可能成为问题。

答案 2 :(得分:3)

可能是一件简单的事情:

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

   return lookupTable[n];      
}

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