Advertisement
dmkozyrev

473.cpp

Jun 11th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. #include <vector>
  2. #include <iostream>
  3. #include <iomanip>
  4.  
  5. struct Int {
  6.     static const int LIMIT = 1000000000;
  7.     static const int WIDTH = 9;
  8.    
  9.     std::vector<int> digits;
  10.    
  11.     Int(int num = 0) : digits(1, num) { }
  12.    
  13.     Int(const std::vector<int> & v) : digits(v.begin(), v.end()) { }
  14.    
  15.     Int operator + (const Int & other) const {
  16.         std::vector<int> answer;
  17.        
  18.         int s1 = (int) this->digits.size();
  19.         int s2 = (int) other.digits.size();
  20.        
  21.         int carry = 0;
  22.        
  23.         for (int i = 0; i < s1 || i < s2; ++i) {
  24.             int d1 = i < s1 ? this->digits[i] : 0;
  25.             int d2 = i < s2 ? other.digits[i] : 0;
  26.             carry += d1+d2;
  27.             answer.push_back(carry % LIMIT);
  28.             carry /= LIMIT;
  29.         }
  30.        
  31.         if (carry)
  32.             answer.push_back(carry);
  33.        
  34.         return Int(answer);
  35.     }
  36.    
  37.     Int operator * (long long num) const {
  38.         std::vector<int> answer;
  39.        
  40.         long long carry = 0;
  41.        
  42.         for (int i = 0; i < (int) digits.size(); ++i) {
  43.             carry += num * digits[i];
  44.             answer.push_back(carry % LIMIT);
  45.             carry /= LIMIT;
  46.         }
  47.        
  48.         if (carry)
  49.             answer.push_back(carry);
  50.        
  51.         return Int(answer);
  52.     }
  53.    
  54.     Int operator * (const Int & other) const {
  55.         Int answer = 0;
  56.         for (int i = (int) digits.size()-1; i >= 0; --i) {
  57.             answer = answer * LIMIT;
  58.             answer = answer + other * digits[i];
  59.         }
  60.         return answer;
  61.     }
  62. };
  63.  
  64. std::ostream & operator << (std::ostream & os, const Int & num) {
  65.     os << num.digits.back();
  66.     for (int i = (int) num.digits.size() - 2; i >= 0; --i)
  67.         os << std::setw(Int::WIDTH) << std::setfill('0') << num.digits[i];
  68.     return os;
  69. }
  70.  
  71. int main() {
  72.     int n;
  73.     std::cin >> n;
  74.    
  75.     std::vector<Int> c(1+n, 1);
  76.    
  77.     for (int i = 2; i <= n; ++i)
  78.         c[i] = c[i-1]+c[i-2];
  79.    
  80.     std::cout << c[n]*c[n];
  81.    
  82.     return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement