高精度整数(大整数)四则运算模板

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
const int Maxn = 100010;

struct bign //大整数结构体
{
    int d[Maxn];
    int len;
    bign()
    {
        memset(d,0,sizeof(d)); //也可用fill()
        len = 0;
    }
};

bign chang(char str[]) //将字符串转化为大整数
{
    bign a;
    a.len = strlen(str);  //字符串长度就是整数的数位
    for(int i = 0;i b.len) return 1;//a比较大
    else if(a.len < b.len) return -1;
    else
    {
        for(int i = a.len - 1;i>=0;i--)
        {
            if(a.d[i] > b.d[i])
                return 1;
            else if(a.d[i] < b.d[i])
                return -1;
        }
        return 0;           //2数相等
    }
}

bign add(bign a,bign b) //高精度加法
{
    bign c;
    int carry = 0; //设置进位
    for(int i = 0;i= 1 && c.d[c.len - 1] == 0) //保留至少为一位数,并且去掉高位的0
            c.len--;
    }
    return c;
}

bign mul(bign a,int b) //高精度和低精度乘法
{
    bign c;
    int carry = 0; //进位
    for(int i = 0;i 0) //进位的数位可能大于1位
    {
        c.d[c.len++] = carry % 10;
        carry /= 10;
    }
    return c;
}

bign divi(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;
}


int main()
{
    freopen("1.txt","r",stdin);
    return 0;
}

你可能感兴趣的:(pat,总结)