Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <iostream>
- #include <string>
- #include <random>
- using namespace std;
- //const int minLengthOfBinaryNumber = 2; //минимальная длина двоичной строки
- //const int maxLengthOfBinaryNumber = 63;//максимальная длина двоичной строки
- random_device rnd;//библиотеки random, чтобы были максимально случайные числа
- mt19937 mersenne(rnd());// ^^^^
- //возвращает случайное число
- long long randInt()
- {
- return
- ((mersenne() % 89659) * (mersenne() % 92489) + (mersenne() % 75503) * (mersenne() % 74797)) *
- ((mersenne() % 65407) * (mersenne() % 60889) + (mersenne() % 57713) * (mersenne() % 55207)) +
- mersenne();//все числа по которым берется модуль - простые.
- }
- // генератор длины строки
- //int genLength() {
- // return max((long long)minLengthOfBinaryNumber, (long long)randInt() % maxLengthOfBinaryNumber);
- //}
- //случайно меняем символы в строке местами
- void Shuffle(string & s)
- {
- for (int i = 0; i < s.length(); ++i)
- for (int j = 0; j < s.length(); ++j)
- {
- bool shuffle = (bool)randInt() % 2;
- if (shuffle)
- swap(s[i], s[j]);
- }
- }
- //генерируем двоичную стироку
- string GenBinaryNumber(int length)
- {
- string res = "";
- for (int i = 0; i < length; ++i)
- {
- res += randInt() % 2 + '0';
- }
- Shuffle(res);
- res[0] = '1';
- return res;
- }
- //добавление ведущих нулей
- void Equate(string & s, string & t)
- {
- while (s.length() != t.length())
- {
- if (s.length() < t.length())
- s = '0' + s;
- else
- t = '0' + t;
- }
- }
- //возвращает количество совпадающих разрядов строк s и t
- int CheckBits(string s, string t)
- {
- int res = 0;
- Equate(s, t);
- for (int i = s.length() - 1; i >= 0; --i)
- if (s[i] != t[i])
- break;
- else
- res++;
- return res;
- }
- //перевод числа из двоичного в десятичную.
- long long BinToDec(const string & s)
- {
- long long res = 0;
- long long power = 1;
- for (int i = s.length() - 1; i >= 0; --i)
- {
- res += (s[i] - '0') * power;
- power *= 2;
- }
- return res;
- }
- int main()
- {
- //freopen("input.txt", "r", stdin);
- //freopen("output.txt", "w", stdout);
- setlocale(LC_ALL, "Russian");
- cout << "Введите длину двоичных числел: ";
- int length; cin >> length;
- string firstBinNumber = GenBinaryNumber(length);// первое число в 2й СС
- string secondBinNumber = GenBinaryNumber(length);// второе число в 2й СС
- if (randInt() % 2 == 1)
- swap(firstBinNumber, secondBinNumber);
- cout << "Первое двоичное число:\n" << firstBinNumber << endl <<
- "Второе двоичное число:\n" << secondBinNumber << endl;
- int bits = CheckBits(firstBinNumber, secondBinNumber);
- if (bits == 0)
- cout << -1 << endl;
- else
- cout << "Число совпадающих разрядов: " << bits << endl;
- long long firstDecNumber = BinToDec(firstBinNumber);//первое число в 10й СС
- long long secondDecNumber = BinToDec(secondBinNumber);//второе число в 10й СС
- cout << "Первое число в 10-й СС: " << firstDecNumber << endl;
- cout << "Второе число в 10-й СС: " << secondDecNumber << endl;
- cout << "Разность первого и второго числа: " << firstDecNumber - secondDecNumber;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement