Guest User

Untitled

a guest
Apr 21st, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.32 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <cstdlib>
  4.  
  5. using namespace std;
  6. int find(long ch);
  7.  
  8. int main(int argc, char **argv)
  9. {
  10.    
  11.     int n;
  12.     int fmin,raz,ch,nch,ch_new,chis,min;
  13.     cin>>n;
  14.     int k=1;
  15.     int ost,ndel;
  16.     ndel = 1;
  17.     min = 999999999;
  18.     ost = 0;
  19.     raz = 1;
  20.    
  21.     for (int i=1;k;i++) {
  22.        
  23.         ost = n % ndel; // Выделяем остаток
  24.         k = n / (ndel*10); // Выделяем старшие разряды
  25.         for (int j=0; j<10; j++) { // ставим цифры 1-9 на iный разряд
  26.             ch_new = k*ndel*10+j*ndel+ost; // собираем новое число
  27.             if ( ( fmin = find(ch_new) ) < min) { min= fmin; ch = ch_new; };
  28.             //находим самое меньшее растояние до степени двойки от этого числа
  29.             //сравниваем растояние с минимальным, если меньше берём его
  30.         }
  31.         ndel*=10; // сдвигаем разряд
  32.        
  33.        
  34.     }
  35.    
  36.     cout<<ch;
  37.     return 0;
  38. }
  39.  
  40.  
  41. int find(long ch) {
  42.         int fuck = 2;
  43.         int nmin,min = ch;
  44.         while (1) {
  45.  
  46.             nmin = abs(ch-fuck);
  47.             if (nmin<min) min = nmin; else break;
  48.             //Если  минимум больше значит и последующие будут больше.
  49.             //Значит мы нашли минимум
  50.             fuck *= 2;
  51.         }
  52.  
  53.         return min;
  54.     }
Add Comment
Please, Sign In to add comment