Advertisement
sasha2483785

Untitled

Apr 24th, 2024 (edited)
571
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <Windows.h>
  4. using namespace std;
  5.  
  6. int* dec2bin_no_ne_sovsem(int num, int& size);
  7. int bin2dec_no_ne_sovsem(int size, int* arr);
  8.  
  9. int main() {
  10.     int* arr = nullptr;
  11.     int size;
  12.     int n =1000;
  13.     bool qwe = true;
  14.  
  15.     setlocale(LC_ALL, "russian");
  16.  
  17.   //главный цикл
  18.     while (qwe) {
  19.         cout << " число: " << n << endl;
  20.         cout << "бинарное представление: ";
  21.         arr = dec2bin_no_ne_sovsem(n, size);
  22.         for (int i = 0; i < size; i++) {
  23.             cout << arr[i];
  24.         }
  25.        
  26.         cout << endl;
  27.         // Уменьшаем размер массива на один элемент
  28.         int newSize = size - 1;
  29.         int* newArr = new int[newSize];
  30.  
  31.         // Копируем все элементы из исходного массива, кроме последнего
  32.         copy(arr, arr + newSize, newArr);
  33.         // Освобождаем память, выделенную под новый массив
  34.         delete[] newArr;
  35.         size = newSize;
  36.         cout << "удалили последний элемент:  ";
  37.         for (int i = 0; i < size; i++) {
  38.             cout << arr[i];
  39.         }
  40.         cout << endl;
  41.         cout << "последнее число :" << arr[size - 1] << endl;
  42.         // Если число четное
  43.         if (n%2 == 0) {
  44.             // Увеличиваем размер массива на 2
  45.             int newSize = size + 2;
  46.             int* newArr = new int[newSize];
  47.  
  48.             // Копируем все элементы из исходного массива
  49.             copy(arr, arr + size, newArr);
  50.  
  51.             // Добавляем в конец "01"
  52.             newArr[newSize - 2] = 0;
  53.             newArr[newSize - 1] = 1;
  54.  
  55.             // Освобождаем память, выделенную под новый массив
  56.             delete[] arr;
  57.             arr = newArr;
  58.             size = newSize;
  59.             cout << "добавили в конец 01:  ";
  60.             for (int i = 0; i < size; i++) {
  61.                 cout << arr[i];
  62.             }
  63.             cout << endl;
  64.         }
  65.  
  66.         // Если число нечетное
  67.         else if (n%2 == 1) {
  68.             // Увеличиваем размер массива на 2
  69.             int newSize = size + 2;
  70.             int* newArr = new int[newSize];
  71.  
  72.             // Копируем все элементы из исходного массива
  73.             copy(arr, arr + size, newArr);
  74.  
  75.             // Добавляем в конец "10"
  76.             newArr[newSize - 2] = 1;
  77.             newArr[newSize - 1] = 0;
  78.  
  79.             // Освобождаем память, выделенную под новый массив
  80.             delete[] arr;
  81.             arr = newArr;
  82.             size = newSize;
  83.             cout << "добавили в конец 10:  ";
  84.             for (int i = 0; i < size; i++) {
  85.                cout << arr[i];
  86.             }
  87.             cout << endl;
  88.         }
  89.         cout << "десятичное: " << bin2dec_no_ne_sovsem(size, arr) << endl;
  90.         if (bin2dec_no_ne_sovsem(size, arr) == 2018) {
  91.             for (int i = 0; i < size - 1; i++) {
  92.                 cout << arr[i];
  93.             }
  94.             qwe = false;
  95.         }
  96.         n++;
  97.        // Sleep(100);
  98.     }
  99.    
  100.     delete[] arr;
  101.    
  102.     return 0;
  103. }
  104.  
  105. int* dec2bin_no_ne_sovsem(int num, int& size) {
  106.     int counter = 0;
  107.     int temp = num;
  108.  
  109.     // Определяем размер массива
  110.     while (temp > 0) {
  111.         temp /= 2;
  112.         counter++;
  113.     }
  114.     size = counter;
  115.  
  116.     // Выделяем память под массив
  117.     int* arr = new int[counter];
  118.  
  119.     // Заполняем массив бинарным представлением числа
  120.     for (int i = counter - 1; i >= 0; i--) {
  121.         arr[i] = num % 2;
  122.         num /= 2;
  123.     }
  124.  
  125.     return arr;
  126. }
  127. int bin2dec_no_ne_sovsem(int size, int* arr) {
  128.     int dec = 0;
  129.     int k = 1;
  130.     // Преобразование бинарного числа в десятичное
  131.     for (int i = size-1; i >= 0; i--) {
  132.         dec += arr[i] * k;
  133.         k *= 2;
  134.     }
  135.    
  136.     return dec;
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement