Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Хитрая задача,

Автор: zhorik 5.01.2007 2:13

Задача:

Дано натуральное число 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;

yes2.gif

Автор: zhorik 5.01.2007 3:07

Цитата(Malice @ 4.01.2007 22:57) *

Поменяй строку:
rez := d*(2*n)+rez;

на
rez := d+rez*2;

yes2.gif


спасибо тебе огромное! smile.gif

я знал, что истина где-то рядом!

Автор: Malice 5.01.2007 3:15

Цитата(zhorik @ 4.01.2007 23:07) *

спасибо тебе огромное! smile.gif

я знал, что истина где-то рядом!

Не за что, только тебе по сути не нужен вообще 1-ый цикл, т.к. его результат (n) дальше не используется. Убирай и его и лишние переменные (нужны только 2) и будет красота smile.gif