您需要计算数字 N 的阶乘,其中 1<=N<=1000。您还需要在响应中提供最多 3000 个字符。我写了一个程序,它在编译器中运行良好:
#include <stdio.h>
#include <gmp.h>
static void
factorial (long n, mpz_t r)
{
mpz_init_set_si (r, 1);
for (; n > 1; n--) {
mpz_mul_si (r, r, n);
}
}
int
main (void)
{
int n;
mpz_t r;
while (scanf ("%d", &n) == 1) {
factorial (n, r);
gmp_printf ("%Zd\n", r);
}
return 0;
}
但是测试系统不接受代码,因为 不知道 GMP 库。告诉我如何解决这个问题?
最有可能的是,测试系统要求您知道算术的工作时间,以及用代码编写它的能力(即对编程语言有足够的了解)。系统的目的不太可能是检查代码的简洁性或简单性。
但是,如果您真的不想手动实现长算法,那么我看到了另一种方法:获取库代码并将其复制粘贴到您的文件中。这可能会导致问题:
事实上,如果你的任务是专门用 C 编写代码,这种技巧几乎等同于作弊。如果 Java 或 Python 也可以从选项中获得(它们在标准库级别支持长数字),那么这更像是一个机会的平衡:)
PS:这是可以内置到您的解决方案中的库的变体:. 测试甚至有一个使用它的阶乘计算示例。
简而言之,这是系统最终接受的代码:
这是另一种解决方案,但测试系统再次不想接受它......