ACM大数的高精度模板一套,来自zju

大数(只能处理正数)

//功能挺全的,以后再作说明吧。

#include <iostream.h>

#include <string.h>

 

#define DIGIT       4

#define DEPTH     10000

#define MAX     100

typedef int bignum_t[MAX+1];

 

int read(bignum_t a,istream& is=cin){

       char buf[MAX*DIGIT+1],ch;

       int i,j;

       memset((void*)a,0,sizeof(bignum_t));

       if (!(is>>buf)) return 0;

       for (a[0]=strlen(buf),i=a[0]/2-1;i>=0;i--)

              ch=buf[i],buf[i]=buf[a[0]-1-i],buf[a[0]-1-i]=ch;

       for (a[0]=(a[0]+DIGIT-1)/DIGIT,j=strlen(buf);j<a[0]*DIGIT;buf[j++]='0');

       for (i=1;i<=a[0];i++)

              for (a[i]=0,j=0;j<DIGIT;j++)

                     a[i]=a[i]*10+buf[i*DIGIT-1-j]-'0';

       for (;!a[a[0]]&&a[0]>1;a[0]--);

       return 1;

}

 

void write(const bignum_t a,ostream& os=cout){

       int i,j;

       for (os<<a[i=a[0]],i--;i;i--)

              for (j=DEPTH/10;j;j/=10)

                     os<<a[i]/j%10;

}

 

int comp(const bignum_t a,const bignum_t b){

       int i;

       if (a[0]!=b[0])

              return a[0]-b[0];

       for (i=a[0];i;i--)

              if (a[i]!=b[i])

                     return a[i]-b[i];

       return 0;

}

 

int comp(const bignum_t a,const int b){

       int c[12]={1};

       for (c[1]=b;c[c[0]]>=DEPTH;c[c[0]+1]=c[c[0]]/DEPTH,c[c[0]]%=DEPTH,c[0]++);

       return comp(a,c);

}

 

int comp(const bignum_t a,const int c,const int d,const bignum_t b){

       int i,t=0,O=-DEPTH*2;

   

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值