高精度

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 1000;
struct Bigint
{
    int len, a[maxn];
    Bigint(int x = 0)
    {
        memset(a, 0, sizeof(a));
        for (len = 1; x; len++)
            a[len] = x % 10, x /= 10;
        len--;
    }

    int& operator [](int i)
    {
        return a[i];
    }

    Bigint operator =(Bigint b)
    {
        len = b.len;
        for (int i = 1; i <= len; i++) a[i] = b[i];
        return *this;
    }
    void flatten(int L)
    {
        len = L;
        for (int i = 1; i <= len; i++)
            a[i + 1] += a[i] / 10, a[i] %= 10;
        while (!a[len]) len--;
    }

    void print()
    {
        for (int i = max(len, 1); i >= 1; i--)
            printf("%d", a[i]);
    }
};
Bigint operator +(Bigint a,Bigint b)
{
    int lon = max(a.len, a.len);
    Bigint c;
    for (int i = 1; i <= lon; i++)
        c[i] += a[i] + b[i];
    c.flatten(lon + 1);
    return c;
}

Bigint operator *(Bigint a, Bigint b)
{
    int lon = a.len + b.len;
    Bigint c;
    for (int i = 1; i <= a.len; i++)
        for (int j = 1; j <= b.len; j++)
            c[i + j - 1] += a[i] * b[j];
    c.flatten(lon + 5);
    return c;
}

int main(void)
{
    Bigint a(25), b(4),c;
    c = a + b;
    c.print();
    return 0;
}

 

posted @ 2021-02-26 18:13  loliconsk  阅读(91)  评论(0)    收藏  举报