Advertisement
Infiniti_Inter

GBN

Oct 8th, 2019
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.56 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <string>
  4. #include <random>
  5. using namespace std;
  6.  
  7.  
  8.  
  9. //const int minLengthOfBinaryNumber = 2; //минимальная  длина двоичной строки
  10. //const int maxLengthOfBinaryNumber = 63;//максимальная длина двоичной строки
  11.  
  12. random_device rnd;//библиотеки random, чтобы были максимально случайные числа
  13. mt19937 mersenne(rnd());// ^^^^
  14.  
  15. //возвращает случайное число
  16. long long randInt()
  17. {
  18.     return
  19.         ((mersenne() % 89659) * (mersenne() % 92489) + (mersenne() % 75503) * (mersenne() % 74797)) *
  20.            ((mersenne() % 65407) * (mersenne() % 60889) + (mersenne() % 57713) * (mersenne() % 55207)) +
  21.             mersenne();//все числа по которым берется модуль - простые.
  22. }
  23. // генератор длины строки
  24. //int genLength() {
  25. //  return max((long long)minLengthOfBinaryNumber, (long long)randInt() % maxLengthOfBinaryNumber);
  26. //}
  27.  
  28. //случайно меняем символы в строке местами
  29. void Shuffle(string & s)
  30. {
  31.     for (int i = 0; i < s.length(); ++i)
  32.         for (int j = 0; j < s.length(); ++j)
  33.         {
  34.             bool shuffle = (bool)randInt() % 2;
  35.             if (shuffle)
  36.                 swap(s[i], s[j]);
  37.         }
  38. }
  39. //генерируем двоичную стироку
  40. string GenBinaryNumber(int length)
  41. {
  42.     string res = "";
  43.     for (int i = 0; i < length; ++i)
  44.     {
  45.         res += randInt() % 2 + '0';
  46.     }
  47.  
  48.     Shuffle(res);
  49.     res[0] = '1';
  50.     return res;
  51. }
  52. //добавление ведущих нулей
  53. void Equate(string & s, string & t)
  54. {
  55.     while (s.length() != t.length())
  56.     {
  57.         if (s.length() < t.length())
  58.             s = '0' + s;
  59.         else
  60.             t = '0' + t;
  61.     }
  62.    
  63. }
  64. //возвращает количество совпадающих разрядов строк s и t
  65. int CheckBits(string s, string t)
  66. {
  67.     int res = 0;
  68.     Equate(s, t);
  69.     for (int i = s.length() - 1; i >= 0; --i)
  70.         if (s[i] != t[i])
  71.             break;
  72.         else
  73.             res++;
  74.     return res;
  75. }
  76. //перевод числа из двоичного в десятичную.
  77. long long BinToDec(const string & s)
  78. {
  79.     long long res = 0;
  80.     long long power = 1;
  81.     for (int i = s.length() - 1; i >= 0; --i)
  82.     {
  83.         res += (s[i] - '0') * power;
  84.         power *= 2;
  85.     }
  86.     return res;
  87. }
  88.  
  89. int main()
  90. {
  91.     //freopen("input.txt", "r", stdin);
  92.     //freopen("output.txt", "w", stdout);
  93.     setlocale(LC_ALL, "Russian");
  94.     cout << "Введите длину двоичных числел: ";
  95.     int length; cin >> length;
  96.     string firstBinNumber = GenBinaryNumber(length);// первое число в 2й СС
  97.     string secondBinNumber = GenBinaryNumber(length);// второе число в 2й СС
  98.     if (randInt() % 2 == 1)
  99.         swap(firstBinNumber, secondBinNumber);
  100.     cout << "Первое двоичное число:\n" << firstBinNumber << endl <<
  101.             "Второе двоичное число:\n" << secondBinNumber << endl;
  102.     int bits = CheckBits(firstBinNumber, secondBinNumber);
  103.     if (bits == 0)
  104.         cout << -1 << endl;
  105.     else
  106.         cout <<  "Число совпадающих разрядов: " << bits << endl;
  107.     long long firstDecNumber = BinToDec(firstBinNumber);//первое число в 10й СС
  108.     long long secondDecNumber = BinToDec(secondBinNumber);//второе число в 10й СС
  109.     cout << "Первое число в 10-й СС: " << firstDecNumber << endl;
  110.     cout << "Второе число в 10-й СС: " << secondDecNumber << endl;
  111.     cout << "Разность первого и второго числа: " << firstDecNumber - secondDecNumber;
  112.    
  113.  
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement