最近,我在一个程序里用到阶乘,需要在一个Edit Box中显示用户所输入的整数的阶乘结果。但是后来发现VC中的数据类型不支持(也许我还没用到支持的数据类型),但是在为Edit Box连接变量时,发现没用支持大数据的数据类型,但是我后来在使用windows自带的计算器时,发现无论计算多大的整数的阶乘,计算器都可以计算出来,所以,现在我想问一下各位,如何实现我描述的计算大数据的阶乘的问题?请不吝赐教,谢谢。

解决方案 »

  1.   

    __int64只能解决一部分问题,如果再大点,还是无法解决的,所以,这样的问题,还是要使用算法+字符串来解决,字符串的长度几乎是无限的。
    我只能提供思路,具体如何解决,有答案了别忘了告诉我一声。
      

  2.   

    弱弱的提一句,你一定要用整型表示吗,c++中可表示的最大范围的数据类型是长双精度型(long double),它可以表示的数量级是10的4932次方,双精度(double)的数量级是10的308次方,而100的阶乘是10的157次方,这两种数据类型应该都可以满足要求的,如果要显示成整型,可以转成字串来显示。
      

  3.   

    看看这个吧 :blog.csdn.net/liangbch
      

  4.   

    其实在C下可以直接操作一段内存地址阿
    没必要用Str表示高精度的
    如果在VB或Delphi可以用Str
    其实用什么都是一样的,用什么数据类型都是一个指针,指向某个内存地址
    只要你写好高精度算法,那么数据结构就不是问题。
      

  5.   

    贴个代码罢
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main( void ){
        int n, i, j, len, g, t, zero;
        static unsigned int a[10000];
        memset(a, 0, 40000);
        a[0]=1;len=1; zero=0;
        scanf("%d", &n);
        for(i=2; i<=n; i++){
            for(j=zero,g=0; j<len; j++){
                t=a[j]*i+g;
                g=t/10000;
                t=t%10000;
                a[j]=t;
                if((!t)&&(j-zero==1)) ++zero;
            }
            while(g){
                a[len++]=g%10000;
                g/=10000;
            }
         }
        while(!a[len]) len--;
        printf("%d", a[len--]);
        while(len>=0) printf("%04d", a[len--]);
        return 0;}