Напишите программу, которая вводит натуральное число N и выводит на экран чётные положительные степени числа 2, не большие, чем N , в порядке убывания. Входные данные: Входная строка содержит одно натуральное число N . Вых...

Напишите программу, которая вводит натуральное число N и выводит на экран чётные положительные степени числа 2, не большие, чем N , в порядке убывания. Входные данные: Входная строка содержит одно натуральное число N . Выходные данные: Программа должна вывести в одну строчку через пробел чётные положительные степени числа 2, не большие, чем N , в порядке убывания. Если таких нет, программа должна вывести число 0.
Гость
Ответ(ы) на вопрос:
Гость
Вариант №1 (не совсем удачный, как было отмечено в комментариях). //PascalABC.NET (версия 3.1, сборка 1210 от 29.03.2016) var n,i,m:integer; flag:boolean; begin   readln(n);   flag:=false;   if (n mod 2<>0)then i:=n-1 else i:=n;   while i>0 do begin       if power(2,i)<=n then begin       write(power(2,i),' '); flag:=true;     end;     i:=i-2; end; if not flag then writeln(0); end. Тест №1 1025 1024 256 64 16 4 Тест №2 1 0 Вариант №2 var a,i,n: integer; begin   a:=1;readln(n);   i:=trunc(log2(n)); //получим степень двойки для n   //если i нечетное,   //то первое искомое число получаем путем сдвига влево на i-1 в   //двоичном представлении числа иначе сдвиг на i   if (i mod 2)=1 then a:=a shl(i-1) else a:=a shl i;   //далее получаем числа сдвигая вправо на 2 разряда   //в двоичном представлении числа   while a>=2 do begin     write(a,' ');     a:=a shr 2;   end; end. Тестовое решение: 2147483647 1073741824 268435456 67108864 16777216 4194304 1048576 262144 65536 16384 4096 1024 256 64 16 4
Гость
var   n: integer; procedure p(i: integer); begin   if (i shr 30 = 0) and (i shl 2 <= n) then p(i shl 2);   p(i shl 2);   write(i, ' ') end; begin   read(n);   if n < 4 then write(0)   else p(4) end.
Не нашли ответ?
Ответить на вопрос
Похожие вопросы