Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ConsoleApplication1.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
- //
- #include <iostream>
- #include <vector>
- #include <string>
- using base = unsigned long long;
- const base b12 = 1'000'000'000'000;
- const base b8 = 1'000'000'00;
- class ell
- {
- base hi = 0, lo = 0;
- public:
- ell() {}
- ell(base n) { lo = n % b12; hi = n / b12; }
- ell operator+(const ell& arg2)const
- {
- ell res;
- res.lo = lo + arg2.lo;
- res.hi = hi + arg2.hi + res.lo / b12;
- res.lo %= b12;
- return res;
- };
- std::string tostring() const {
- std::string res = std::to_string(lo);
- if (hi > 0)
- {
- res = std::to_string(hi) + std::string(12 - res.length(), '0') + res;
- }
- return res;
- }
- friend std::ostream& operator<<(std::ostream& os, const ell& N)
- {
- return os << N.tostring();
- }
- };
- class ell24
- {
- base hi = 0, lo = 0, mi=0;
- public:
- ell24() {}
- ell24(base n) { lo = n % b8; n /= b8; mi = n % b8; hi = n / b8; }
- ell24 operator+(const ell24& arg2)const
- {
- ell24 res;
- res.lo = lo + arg2.lo;
- res.mi = mi + arg2.mi + res.lo / b8;
- res.lo %= b8;
- res.hi = hi + arg2.hi + res.mi / b8;
- res.mi %= b8;
- return res;
- };
- ell24 operator*(const ell24& arg2)const
- {
- ell24 res;
- res.lo = lo * arg2.lo;
- res.mi = lo * arg2.mi + mi * arg2.lo+res.lo/b8;
- res.lo %= b8;
- res.hi = lo * arg2.hi + mi * arg2.mi + hi * arg2.lo+res.mi/b8;
- res.mi %= b8;
- return res;
- }
- std::string tostring() const {
- std::string lo_str = std::to_string(lo); lo_str = std::string(8 - lo_str.length(), '0') + lo_str;
- std::string mi_str = std::to_string(mi); mi_str = std::string(8 - mi_str.length(), '0') + mi_str;
- std::string res= std::to_string(hi)+mi_str+lo_str;
- return std::string(res.begin()+res.find_first_not_of('0'), res.end());
- }
- friend std::ostream& operator<<(std::ostream& os, const ell24& N)
- {
- return os << N.tostring();
- }
- };
- std::vector<ell> F(101);
- base fib(int n)
- {
- if (n <= 1)return n;
- return fib(n - 1) + fib(n - 2);
- }
- void fib_iter()
- {
- F[0] = 0;
- F[1] = 1;
- for (size_t i = 2; i < 101; i++)
- {
- F[i] = F[i - 1] + F[i - 2];
- }
- }
- int main()
- {
- ell24 x(1234567890123), y(98765432101);
- std::cout << x * y << std::endl;
- fib_iter();
- for (size_t i = 10; i <= 100; i += 1)
- {
- std::cout << i << ":\t " << F[i] << std::endl;
- }
- std::cout << "Hello World!\n";
- }
- // Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
- // Отладка программы: F5 или меню "Отладка" > "Запустить отладку"
- // Советы по началу работы
- // 1. В окне обозревателя решений можно добавлять файлы и управлять ими.
- // 2. В окне Team Explorer можно подключиться к системе управления версиями.
- // 3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения.
- // 4. В окне "Список ошибок" можно просматривать ошибки.
- // 5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода.
- // 6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement