#ifndef BIGNUM_H
#define BIGNUM_H

#include <vector>
#include <iostream>

class BigNum {
    static const int base = 10000;
    std::vector<int> n;
public:
    explicit BigNum(int = 0);
    BigNum& operator+=(const BigNum &);
    BigNum& mul(int);
    int digits10() const;
    int sum_digits10() const;
private:
    void print(std::ostream &) const;
    static int digits10(int);
    static int sum_digits10(int);
    friend inline std::ostream& operator<<(std::ostream&, const BigNum &);
};

inline int BigNum::digits10() const {
    return (n.size() ? n.size() * 4 + digits10(n.back()) - 4 : 0);
}

inline std::ostream& operator<<(std::ostream& out, const BigNum& b) {
    b.print(out);
    return out;
}

#endif /* BIGNUM_H */
