高精度整数的解法

题意很好理解,就是计算过程中可能超出int 的范围,现在就来解决这个问题。

王道机试指南给出的解法是采用一个digit[1000]数组存储每四位的值,例如10001这个数,在数组里面存放的方式就是digit[0]=1,digit[1]=1;这样就能把那些大数存储下来了。话不多说看代码

#include<stdio.h>

struct bigInt

{

    int digit[1000];

    int size;

    void init()

    {

        for(int i=0;i<1000;i++)

            digit[i]=0;

        size=0;

    }

    void set(int x)//用一个小整数设置高精度整数

{

    init();

    do

    {

        digit[size++]=x%10000;

        x/=10000;

    }while(x!=0);

}

    void output()

    {

        for(int i=size-1;i>=0;i--)

        {

            if(i!=size-1)

                printf("%04d",digit[i]);

            else

                printf("%d",digit[i]);

        }

    }

    bigInt operator *(int x)const

    {

        bigInt ret;

        ret.init();

        int carry=0;

        for(int i=0;i<size;i++)

        {

            int temp=x*digit[i]+carry;

            carry=temp/10000;

            temp=temp%10000;

            ret.digit[ret.size++]=temp;

        }

        if(carry!=0)

            ret.digit[ret.size++]=carry;

        return ret;

    }


}a;

int main()

{

    int n;

    while(scanf("%d",&n)!=EOF)

    {

      a.init();

        a.set(1);

        for(int i=1;i<=n;i++)

            a=a*i;

        a.output();

    }

    return 0;

}

其他类似的大精度整数都可以这样计算,希望下次见到我会做呵呵

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容