Advertisement
Guest User

BigInteger.hpp

a guest
May 23rd, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.12 KB | None | 0 0
  1. #pragma once
  2.  
  3. #include <fstream>
  4. #include <iostream>
  5. #include <vector>
  6. #include <cmath>
  7. template<typename T, size_t Base = (size_t)1e9>
  8.  
  9. class BigInteger {
  10. public:
  11.     explicit BigInteger(long long val = 0);
  12.     explicit BigInteger(const std::string & s);
  13.     explicit BigInteger(const std::vector<T> & number, const int sign);
  14.  
  15.     template<typename NewT, size_t NewBase>
  16.     explicit operator BigInteger<NewT, NewBase>();
  17.  
  18.     BigInteger(const BigInteger &);
  19.     BigInteger(BigInteger &&);
  20.  
  21.     size_t Size() const;
  22.     T operator[](size_t id) const;
  23.  
  24. //  BigInteger& operator = (BigInteger &val);
  25.     BigInteger& operator = (BigInteger val);
  26.     bool operator<(const BigInteger &val) const;
  27.     bool operator>(const BigInteger &val) const;
  28.     bool operator<=(const BigInteger &val) const;
  29.     bool operator>=(const BigInteger &val) const;
  30.     bool operator==(const BigInteger &val) const;
  31.     bool operator!=(const BigInteger &val) const;
  32.     BigInteger abs() const;
  33.  
  34.     BigInteger & operator +=(const BigInteger &val);
  35.     BigInteger operator +(const BigInteger &val) const;
  36.     BigInteger & operator -=(const BigInteger &val);
  37.     BigInteger operator -(const BigInteger &val) const;
  38.     BigInteger & operator *=(const BigInteger &val);
  39.     BigInteger operator *(const BigInteger &val);
  40.     BigInteger & operator *=(long long val);
  41.     BigInteger operator *(long long val);
  42.     BigInteger & operator /=(long long val);
  43.     BigInteger operator /(long long val) const;
  44.     long long operator %(long long val) const;
  45.     BigInteger operator-() const;
  46.     void clear();
  47.     size_t num_Of_blocks();
  48.     size_t num_Of_bits();
  49.     size_t size_Of_number();
  50. private:
  51.     template<T> friend std::ostream & operator <<(std::ostream &, const BigInteger &);
  52.     template<T> friend std::istream & operator >>(std::istream &, BigInteger &);
  53.     int sign;
  54.     std::vector<T> number;
  55.     size_t size_of_number = 0;
  56.     const size_t num_of_bits = std::ceil(log2(Base));
  57.     const size_t num_of_blocks = sizeof(T) * 8 / num_of_bits;
  58. };
  59.  
  60. template<typename T, size_t Base>
  61. std::ostream & operator <<(std::ostream &, const BigInteger<T, Base> &);
  62.  
  63. template<typename T, size_t Base>
  64. std::istream & operator >>(std::istream &, BigInteger<T, Base> &);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement