20111217

ACM 10323 Factorial! You Must be Kidding!!!

如同題目所寫,
Factorial! You Must be Kidding!!!
沒啥規則的一題 = =,
input有可能是負數,所以要考慮負數的情況。
什麼?你說負數有階層?娜舞摳琳!
是的題目也這樣寫啊!
反正-1!是Overflow,
-2!是Underflow,
-3!是Overflow,
-4!是Underflow,
以此類推,
至於為什麼……不要問比較好,
問了會腦殘。
(-1! = 0! / 0,把他當成無限大去想,
-2! = -1! / -1,負無限大)

/* ACM 10323 Factorial! You Must be Kidding!!! 
 * mythnc
 * 2011/12/17 09:24:42   
 * run time: 0.028
 */
#include <stdio.h>

#define MAX 6227020800LL

int main(void)
{
    int i, n;
    long long ans[20] = { 1 };

    for (i = 1; ans[i - 1] < MAX; i++)
        ans[i] = ans[i - 1] * i;

    while (scanf("%d", &n) == 1)
        if (n < 0) {
            n *= -1;
            if (n % 2 == 1)
                printf("Overflow!\n");
            else
                printf("Underflow!\n");
        }
        else if (n < 8)
            printf("Underflow!\n");
        else if (n >= i)
            printf("Overflow!\n");
        else
            printf("%lld\n", ans[n]);

    return 0;
}

沒有留言: