如何创建一个数据类型来保存200+;C中的长数字?

如何创建一个数据类型来保存200+;C中的长数字?,c,types,C,Types,好的,我正试图解决这个问题: 利用我对c的了解,我得出了以下代码: #include <stdio.h> #include <conio.h> long double factorial(int); int main() { long double num[100], fact[100]; int i = 0, ex; scanf("%d", &ex); for ( i = 0; i < ex; i++ ) {

好的,我正试图解决这个问题:

利用我对c的了解,我得出了以下代码:

#include <stdio.h>
#include <conio.h>
long double factorial(int);
int main() 
{
    long double num[100], fact[100];
    int i = 0, ex;
    scanf("%d", &ex);
    for ( i = 0; i < ex; i++ )
    {
        scanf("%lf", &num[i]);
    }
    i = 0;
    printf("\n");
    for (i = 0; i < ex; i++ )
    {
        fact[i] = factorial(num[i]);
        printf("%.0lf\n", fact[i]);
    }
    getch();
    return 0;
}
long double factorial(int num)
{
    long double onum, fact;
    int i;
    fact = 1;
    onum = num;
    for ( i = 1; i < onum; i++ )
    {
        fact = fact * num;
        num--;
    }
    return fact;
}
#包括
#包括
长双阶乘(int);
int main()
{
长双数字[100],事实[100];
int i=0,ex;
scanf(“%d”、&ex);
对于(i=0;i

问题是长双精度的长度不足以容纳100个值!那么,我如何才能创建一个能够容纳这么大的值的数据类型呢?

没有一种本机数据类型能够容纳这么大的数字。看看这本书

GMP对于您的特定问题可能有点过分,但它会完成工作。您还可以编写自己的任意精度小库来实现这一点

编辑-一个示例bignum类型:

struct mybignum 
{
    int length;
    int sign;
    int digit[200];
};

您可以使用该结构实现小学的加法、减法、乘法等算法,并支持presto-200位数字。

对于这个特殊问题,GMP确实是一个过火的问题

事实上,即使是Carl Norum提供的结构,虽然有用且更通用,但包含的内容也超出了您的需要。特别是,因为所有的阶乘都是正整数,所以不需要担心符号

而且,不需要实现加法、减法,甚至是一般的乘法。您只需要担心将这些“bignum”中的一个乘以一个整数,这并不难

这是乘法运算的存根

void multiply( mybignum bn, int factor ) {
  // for each of the digits in 'bn'
  // multiplies 'factor' by the particular digit 
  // adds the previous remainder and stores
  // the new carry value
}

还有CanSpice,你到底是怎么得到正确格式的?我已经试了10分钟,但运气不好。谢谢修理!:)在每行前面加4个空格。简单的方法是选择您的代码,然后选择
{}
按钮。@CanSpice,谢谢。我觉得自己很笨。不管怎么说,你节省了我很多时间,更重要的是,你节省了很多人的时间,否则这些人的时间就会浪费在解决我未来的问题上!SPOJ现在是否接受
@pmg编号。它不接受conio.h,但它是外部的。虽然我可以在我的一个项目中使用类似的东西,但上面的代码必须在在线服务器上遵守,并且没有办法在那里添加完整的外部库。在C中有什么方法可以做到这一点吗?@Ishan-如果你不能使用这个库,你需要自己编写。一些小到足以满足这个问题的源代码限制,并且仍然足够快可以进行100次乘法的东西应该不会那么糟糕。谢谢。看来我得这么做了。我脑子里有点不对劲。我试试这个。谢谢!