Advertisement
mamamaria

karatsuba

Nov 7th, 2020 (edited)
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.55 KB | None | 0 0
  1. // Karatsuba.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
  2. //
  3.  
  4. #include <iostream>
  5. #include <vector>
  6. #include <random>
  7. #include <limits>
  8. using namespace std;
  9. random_device rd;
  10. mt19937_64 eng(rd());
  11. uniform_int_distribution<long long> distr;
  12.  
  13. const int base = 10;
  14. using veryLong = vector <long long>;
  15.  
  16. veryLong sum(veryLong p1, veryLong p2) {
  17.     long long length;
  18.     if (p1.size() > p2.size())
  19.         length = p1.size() + 1;
  20.     else
  21.         length = p2.size() + 1;
  22.  
  23.     for (int i = 0; i < length; i++)
  24.     {
  25.         p2[i] += p1[i]; // суммируем последние разряды чисел
  26.         p2[i + 1] += (p2[i] / 10); // если есть разряд для переноса, переносим его в следующий разряд
  27.         p2[i] %= 10; // если есть разряд для переноса он отсекается
  28.     }
  29.  
  30.     if (p2[length - 1] == 0)
  31.         length--;
  32.  
  33.     return p2;
  34. }
  35.  
  36. veryLong dif(veryLong p1, veryLong p2){
  37.     long long length;
  38.     int k = 3; // если к == 3, значит числа одинаковой длинны
  39.     length = p1.size();
  40.     if (p1.size() > p2.size())
  41.     {
  42.         length = p1.size();
  43.         k = 1; // если к == 1, значит первое число длиннее второго
  44.     }
  45.     else
  46.         if (p2.size() > p1.size())
  47.         {
  48.             length = p2.size();
  49.             k = 2; // если к == 2, значит второе число длиннее первого
  50.         }
  51.         else // если числа одинаковой длинны, то необходимо сравнить их веса
  52.             for (int i = 0; i < length;) // поразрядное сравнение весов чисел
  53.             {
  54.                 if (p1[i] > p2[i]) // если разряд первого числа больше
  55.                 {
  56.                     k = 1; // значит первое число длиннее второго
  57.                     break; // выход из цикла for
  58.                 }
  59.  
  60.                 if (p2[i] > p1[i]) // если разряд второго числа больше
  61.                 {
  62.                     k = 2; // значит второе число длиннее первого
  63.                     break; // выход из цикла for
  64.                 }
  65.             } // конец for
  66.     return p2;
  67. }
  68.  
  69. void split(veryLong num, veryLong& part1, veryLong& part2) {
  70.     for (int i = 0; i < num.size()/2; i++)
  71.         part1.push_back(num[i]);
  72.     for (int i = num.size() / 2; i < num.size(); i++)
  73.         part2.push_back(num[i]);
  74. }
  75. void multi(veryLong x, veryLong y) {
  76.     veryLong a, b, c, d;
  77.     split(x, a, b);
  78.     split(y, c, d);
  79.  
  80.  
  81. }
  82. int main()
  83. {
  84. }
  85.  
  86.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement