Дано натуральное число m. Найти такое натуральное число n, двоичная запись которого получается из двоичной записи m изменением порядка цифр на обратный.
ломаю голову несколько дней
как делать представляю:
1)преобразовать введенное число в двоичный вид 2)поменять порядок цифр на обратный 3)преобразовать полученное число в десятичный вид
с первыми двумя пунтками проблем не возникает, а вот с третьим проблема.
Делаю так:
Код
program test; uses crt;
var x, xxx, d, c, rez, n : integer; res,ves:longint; i,j:byte; y : real;
begin clrscr; readln(x); rez:=0; n:=0;
xxx:=x;
{в этом цикле узнаю кол-во повторов цикла} while xxx<>0 do begin d:=xxx mod 2; xxx :=xxx div 2; n :=n+1; end;
n :=n-1;
{Нахожу двоичный вид введенного числа, изменяю порядок цифр на обратный и пытаюсь получить десятичный вид числа} while x<>0 do begin d:=x mod 2; x :=x div 2; rez := d*(2*n)+rez; n := n-1; end;
writeln(rez); readln; end.
у кого какие мысли по поводу решения этой задачки?
Автор: мисс_граффити 5.01.2007 2:15
почитай FAQ
Автор: Malice 5.01.2007 2:57
Поменяй строку:
rez := d*(2*n)+rez;
на
rez := d+rez*2;
Автор: zhorik 5.01.2007 3:07
Цитата(Malice @ 4.01.2007 22:57)
Поменяй строку:
rez := d*(2*n)+rez;
на
rez := d+rez*2;
спасибо тебе огромное!
я знал, что истина где-то рядом!
Автор: Malice 5.01.2007 3:15
Цитата(zhorik @ 4.01.2007 23:07)
спасибо тебе огромное!
я знал, что истина где-то рядом!
Не за что, только тебе по сути не нужен вообще 1-ый цикл, т.к. его результат (n) дальше не используется. Убирай и его и лишние переменные (нужны только 2) и будет красота