Advertisement
Argent007

Про Фибоначчи 2

Feb 15th, 2023
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.09 KB | None | 0 0
  1. // ConsoleApplication1.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
  2. //
  3.  
  4. #include <iostream>
  5. #include <vector>
  6. #include <string>
  7.  
  8. using base = unsigned long long;
  9. const base b12 = 1'000'000'000'000;
  10. const base b8 = 1'000'000'00;
  11.  
  12. class ell
  13. {
  14.    base hi = 0, lo = 0;
  15. public:
  16.    ell() {}
  17.    ell(base n) { lo = n % b12; hi = n / b12; }
  18.    ell operator+(const ell& arg2)const
  19.    {
  20.        ell res;
  21.        res.lo = lo + arg2.lo;
  22.        res.hi = hi + arg2.hi + res.lo / b12;
  23.        res.lo %= b12;
  24.        return res;
  25.    };
  26.    std::string tostring() const {
  27.        std::string res = std::to_string(lo);
  28.        if (hi > 0)
  29.        {
  30.            res = std::to_string(hi) + std::string(12 - res.length(), '0') + res;
  31.        }
  32.        return res;
  33.    }
  34.    friend std::ostream& operator<<(std::ostream& os, const ell& N)
  35.    {
  36.        return os << N.tostring();
  37.    }
  38. };
  39.  
  40. class ell24
  41. {
  42.    base hi = 0, lo = 0, mi=0;
  43. public:
  44.    ell24() {}
  45.    ell24(base n) { lo = n % b8; n /= b8;  mi = n % b8; hi = n / b8; }
  46.    ell24 operator+(const ell24& arg2)const
  47.    {
  48.        ell24 res;
  49.        res.lo = lo + arg2.lo;
  50.        res.mi = mi + arg2.mi + res.lo / b8;
  51.        res.lo %= b8;
  52.        res.hi = hi + arg2.hi + res.mi / b8;
  53.        res.mi %= b8;
  54.        return res;
  55.    };
  56.    ell24 operator*(const ell24& arg2)const
  57.    {
  58.        ell24 res;
  59.        res.lo = lo * arg2.lo;
  60.        res.mi = lo * arg2.mi + mi * arg2.lo+res.lo/b8;
  61.        res.lo %= b8;
  62.        res.hi = lo * arg2.hi + mi * arg2.mi + hi * arg2.lo+res.mi/b8;
  63.        res.mi %= b8;
  64.        return res;
  65.    }
  66.    std::string tostring() const {
  67.        std::string lo_str = std::to_string(lo); lo_str = std::string(8 - lo_str.length(), '0') + lo_str;
  68.        std::string mi_str = std::to_string(mi); mi_str = std::string(8 - mi_str.length(), '0') + mi_str;
  69.        std::string res= std::to_string(hi)+mi_str+lo_str;
  70.        return std::string(res.begin()+res.find_first_not_of('0'), res.end());
  71.    }
  72.    friend std::ostream& operator<<(std::ostream& os, const ell24& N)
  73.    {
  74.        return os << N.tostring();
  75.    }
  76. };
  77.  
  78.  
  79. std::vector<ell> F(101);
  80.  
  81. base fib(int n)
  82. {
  83.    if (n <= 1)return n;
  84.    return fib(n - 1) + fib(n - 2);
  85. }
  86.  
  87. void fib_iter()
  88. {
  89.    F[0] = 0;
  90.    F[1] = 1;
  91.    for (size_t i = 2; i < 101; i++)
  92.    {
  93.        F[i] = F[i - 1] + F[i - 2];
  94.    }
  95. }
  96.  
  97. int main()
  98. {
  99.    ell24 x(1234567890123), y(98765432101);
  100.    std::cout << x * y << std::endl;
  101.  
  102.    fib_iter();
  103.    for (size_t i = 10; i <= 100; i += 1)
  104.    {
  105.        std::cout << i << ":\t " << F[i] << std::endl;
  106.    }
  107.  
  108.    std::cout << "Hello World!\n";
  109. }
  110.  
  111. // Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
  112. // Отладка программы: F5 или меню "Отладка" > "Запустить отладку"
  113.  
  114. // Советы по началу работы
  115. //   1. В окне обозревателя решений можно добавлять файлы и управлять ими.
  116. //   2. В окне Team Explorer можно подключиться к системе управления версиями.
  117. //   3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения.
  118. //   4. В окне "Список ошибок" можно просматривать ошибки.
  119. //   5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода.
  120. //   6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл.
  121.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement