C/Find 190!c编程中的(阶乘)

Or *_*ith 3 c fact

我试图找到190!C.

我将我的变量定义为long double,但我看到它(仅正确)计算到172!:

在那之后,我得到了#INF00000...`

有办法吗?

Pau*_*kin 5

实际上只需几行代码即可实现bigint实现以计算因子.这是打印前200个阶乘的代码.

#include <stdio.h>

int mult(int n, size_t size, unsigned char *data) {
    int carry = 0;
    for (int i = 0; i < size; i++) {
        int result = data[i] * n + carry;
        data[i] = result % 100;
        carry = (result - data[i]) / 100;
    }
    return carry != 0;
}

void print(size_t size, unsigned char *data) {
    int first = 1;
    for (int i = 0; i < size; i++) {
        int d = data[size - i - 1];
        if (first && d == 0) continue;
        printf("%0*d", first && d < 10 ? 1 : 2, d);
        first = 0;
    }
}

int main(int argc, char*argv[]) {
    for (int fact = 1; fact <= 200; fact++) {
        unsigned char data[1000] = {1};
        for (int i = 1; i <= fact; i++) {
            if (mult(i, sizeof(data), data)) {
                return 1;
            }
        }
        printf("%d! = ", fact);
        print(sizeof(data), data);
        printf("\n");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)