UVa10323:Factorial! You Must be Kidding!!!
题目大意
给定数字n,计算n!并输出。有两个特例,如果n!超过6227020800则输出Overflow!
,如果n!小于10000则输出Underflow!
。
Solution
6227020800刚好是13!,而10000介于7!和8!之间,所以只要对n做一下比较,分情况输出即可。
Note
这题有个很智障的地方——n可以为负数。所以需要强行拓展关于阶乘的定义。
factorial(n) = n ∗ factorial(n − 1)
利用题目中给出的这个公式,factorial(0) = 0 ∗ factorial(-1)
。
再稍作变形
factorial(-1) = factorial(0) / 0
,所以-1的阶乘等于∞。继续按照这个思路扩展,
factorial(-1) = -1 ∗ factorial(-2)
,所以-2的阶乘等于-∞。
以此类推,在n为负数的前提下,n如果是奇数答案就是Overflow!
,如果是偶数答案就是Underflow!
AC-Code(C++)
Time:0ms
#include #include #include #include #include #include