巨大な数

今後のために残しておく。ただの備忘録です。

#include <cstdio>
#include <cstdlib>
using namespace std;

class CLongNum{
    private:
        int m_length;
        int* m_data;
    public:
        CLongNum(int l_):m_length(l_){
            m_data = new int[m_length];
            reset();
        }
        ~CLongNum(){
            delete[] m_data;
        }
        void reset(){
            for(int i=0; i < m_length; i++){
                (*this)(i) = 0;
            }
        }
        int & operator()(int index_){
            if(index_ < m_length){
                return m_data[index_];
            }
        }
        CLongNum operator+(CLongNum& adder_){
            CLongNum ans(m_length);
            for(int i=0; i < m_length; i++){
                ans(i) = (*this)(i) + adder_(i);
                if(ans(i) > 9){
                    ans(i+1) += 1;
                    ans(i) -= 10;
                }
            }
            return ans;
        }
        CLongNum & operator+=(CLongNum & adder_){
            for(int i=0; i < m_length; i++){
                (*this)(i) = (*this)(i) + adder_(i);
                if((*this)(i) > 9){
                    (*this)(i+1) += 1;
                    (*this)(i) -= 10;
                }
            }
            return (*this);
        }
        void put(){
            for(int i=0; i < m_length; i++){
                printf("%d", m_data[m_length-i-1]);
            }
            printf("\n");
        }
};

int main(){
    CLongNum* n = new CLongNum(100);
    CLongNum* adder = new CLongNum(100);
    freopen("input.txt", "r", stdin);
    for(int i=0; i < 100; i++){
        char st[51];
        scanf("%s", st);
        adder->reset();
        for(int j=0; j < 50; j++){
            (*adder)(50-j-1) = st[j] - '0';
        }
        adder->put();
        (*n) += (*adder);
    }
    n->put();
    delete n;
    delete adder;
    return 0;
}