Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <iostream>
- #include <cstdlib>
- using namespace std;
- int find(long ch);
- int main(int argc, char **argv)
- {
- int n;
- int fmin,raz,ch,nch,ch_new,chis,min;
- cin>>n;
- int k=1;
- int ost,ndel;
- ndel = 1;
- min = 999999999;
- ost = 0;
- raz = 1;
- for (int i=1;k;i++) {
- ost = n % ndel; // Выделяем остаток
- k = n / (ndel*10); // Выделяем старшие разряды
- for (int j=0; j<10; j++) { // ставим цифры 1-9 на iный разряд
- ch_new = k*ndel*10+j*ndel+ost; // собираем новое число
- if ( ( fmin = find(ch_new) ) < min) { min= fmin; ch = ch_new; };
- //находим самое меньшее растояние до степени двойки от этого числа
- //сравниваем растояние с минимальным, если меньше берём его
- }
- ndel*=10; // сдвигаем разряд
- }
- cout<<ch;
- return 0;
- }
- int find(long ch) {
- int fuck = 2;
- int nmin,min = ch;
- while (1) {
- nmin = abs(ch-fuck);
- if (nmin<min) min = nmin; else break;
- //Если минимум больше значит и последующие будут больше.
- //Значит мы нашли минимум
- fuck *= 2;
- }
- return min;
- }
Add Comment
Please, Sign In to add comment