高精度运算

来源:互联网 发布:5钻淘宝店铺多少钱 编辑:程序博客网 时间:2024/05/21 08:48

高精度运算结构体

struct bign{    int d[1010];    int len;    bign(){    memset(d,0,sizeof(d));    len=0;    }};
相关方法

bign change(char str[]){    bign a;    a.len=strlen(str);    for(int i=0;i<a.len;i++){        a.d[i]=str[a.len-i-1]-'0';    }    return a;}

高精度加法:

bign add(bign a,bign b){    bign c;    int carry=0;    for(int i=0;i<a.len||i<b.len;i++){        int t=a.d[i]+b.d[i]+carry;        c.d[c.len++]=t%10;        carry=t/10;    }    if(carry!=0) c.d[c.len++]=carry;    return c;}

高精度减法:

bign sub(bign a,bign b){    bign c;    for(int i=0;i<a.len||i<b.len;i++){        if(a.d[i]<b.d[i]){            a.d[i+1]--;            a.d[i]+=10;        }        c.d[c.len++]=a.d[i]-b.d[i];        while(c.len-1>=1&&c.d[c.len-1]==0){            c.len--;        }    }    return c;}

高精度与低精度乘法:

bign mul(bign a,int b){    bign c;    int carry=0;    for(int i=0;i<a.len;i++){        int t=a.d[i]*b+carry;        c.d[c.len++]=t%10;        carry=t/10;    }    while(carry!=0){        c.d[c.len++]=carry%10;        carry/=10;    }    return c;}
高精度与低精度除法:

bign div(bign a,int b,int& r){    bign c;    c.len=a.len;    for(int i=a.len-1;i>=0;i--){        r=r*10+a.d[i];        if(r<b) c.d[i]=0;        else{            c.d[i]=r/b;            r=r%b;        }    }    while(c.len-1>=1&&c.d[c.len-1]==0){        c.len--;    }    return c;}




0 0
原创粉丝点击