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);
- //}
- string decToBin(int n)
- {
- string s = "";
- while (n)
- {
- s += n % 2 + '0';
- n /= 2;
- }
- reverse(s.begin(), s.end());
- while (s.length() < 4)
- s = '0' + s;
- return s;
- }
- int binToDec(string s)
- {
- int res = 0;
- int x = 1;
- for (int i = s.length() - 1; i >= 0; --i)
- {
- res += x*(s[i] - '0');
- x *= 2;
- }
- return res;
- }
- 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;
- }
- int main()
- {
- //freopen("input.txt", "r", stdin);
- //freopen("output.txt", "w", stdout);
- setlocale(LC_ALL, "Russian");
- int length = 8;
- string S = GenBinaryNumber(length);
- //string S = "10101101";
- int cap = 16 * 8 + 15;//максимум 16 строк, по 8 символов + 15 пробелов между ними
- for (int i = 0; i < 5; ++i)
- {
- string s = S.substr(0, 4);
- for (int j = 0; j < i; ++j)
- s[j] = '0';
- string t = S.substr(4, 4);
- int cnt = (int)pow(2, i);//количество выводимых строк
- int space = (cap - cnt * 9 + 1) / 2;
- for (int j = 0; j < space; ++j)
- cout << ' ';
- int add = 16 / cnt;
- int fs = binToDec(s);
- for (int j = 0; j < cnt; ++j)
- {
- cout << decToBin(fs) << t << ' ';
- fs += add;
- }
- cout << endl;
- }
- }
Add Comment
Please, Sign In to add comment