РЕШИТЬ Алиса учится работать с двоичными числами. Она уже поняла, что число в двоичной записи получается в несколько раз длиннее, чем в десятичной. А еще она поняла, что нули писать дольше чем единицы. И теперь ее любимые числа — это те, двоичная запись которых содержит как можно больше единиц. Алисе дали задание — выбрать одно произвольное число из заданного закрытого интервала [a;b][a;b] и перевести его в двоичную запись. И теперь Алиса просит, чтобы вы написали программу, которая найдет в этом интервале число, двоичная запись которого содержит наибольшее количество единиц. Если таких чисел будет несколько, то Алиса будет рада любому из них.
Формат входных данных
На вход через пробел подаются два натуральных числа aa и bb. При этом 1\leq a\leq b \leq 10^{18}1≤a≤b≤10
18
. Обратите внимание, что для хранения таких чисел в программе на С++ вам потребуется тип long long. В программе на PascalABC такой тип называется Int64.
Формат выходных данных
Программа должна вывести одно целое число из заданного диапазона, двоичная запись которого содержит наибольшее количество единиц. Само число следует выводить в десятичной записи.
Методика проверки и пояснение к тесту
Программа проверяется на 20 тестах. Прохождение каждого теста оценивается в При этом в первых пяти тестах 1\leq a\leq b \leq 10001≤a≤b≤1000. Тесты из условия задачи при проверке не используется.
Sample Input 1:
150 200
Sample Output 1:
191
Sample Input 2:
1 255
Sample Output 2:
255
Sample Input 3:
127 200
Sample Output 3:
127
Var n:longint;
Function MinDigit(n:longint):integer;
var s,a:string; c,i:integer;
begin
str(n,s);
a:=s[1];
for i:=2 to length(s) do
if s[i]<a then a:=s[i];
val(a,n,c);
MinDigit:=n;
end;
Function MaxDigit(n:longint):integer;
var s,a:string; c,i:integer;
begin
str(n,s);
a:=s[1];
for i:=2 to length(s) do
if s[i]>a then a:=s[i];
val(a,n,c);
MaxDigit:=n;
end;
Begin
readln(n);
writeln(MinDigit(n),' ',MaxDigit(n));
End.
По факту переменную "c" можно убрать из функций и использовать вместо нее уже не нужную в конце "i", таким образом избавившись от одной переменной. Но это не принципиально на самом деле, к тому же так понятней, какая переменная за что отвечает.
uses crt;
var n,nt,p:integer;
begin
writeln('*** Alphaues is thinking... ***');
write('Ok, введите натуральное число N = ');
readln(n);
nt:=n;
while nt>=10 do
begin
p:=nt;
nt:= nt div 10;
end;
writeln('Cумма первых двух цифр числа ',n,' равна ',(p div 10)+(p mod 10));
writeln('Произведение первых двух цифр числа ',n,' равно ',(p div 10)*(p mod 10));
end.
Program Kasyanova98_2;
uses crt;
var n,nt,sum,kw,temp:integer;
begin
writeln('*** Alphaues is thinking... ***');
write('Ok, введите натуральное число N = ');
readln(n);
nt:=n;
sum:=0;
kw:=1;
while nt>=1 do
begin
temp:=nt mod 10;
sum := sum + temp;
kw:=kw * temp;
nt := nt div 10;
end;
if kw*kw=sum*sum*sum then
writeln('Квадрат произведения цифр числа ',n,' равняется кубу суммы его цифр')
else
writeln('Квадрат произведения цифр числа ',n,' НЕ равняется кубу суммы его цифр');
end.
Program Kasyanova98_3.1;
uses crt;
const n=10;
var
x,y:integer;
begin
writeln('');
writeln('* ТАБЛИЦА УМНОЖЕНИЯ *');
writeln('');
write('* * ');
for y:=1 to n do
begin
write(y:2);
if y<n then write(' | ')
else writeln(' * ');
end;
writeln('');
for x:=1 to n do
begin
write('* ',x:2, ' * ');
for y:=1 to n do
begin
write(x*y:2);
if y<n then write(' | ')
end;
if x*y<100 then writeln(' * ')
else writeln('* ');
if x<10 then writeln('++')
else writeln('');
end;
end.
Program Kasyanova98_3.2;
uses crt;
const n=10;
var
x,y:integer;
begin
writeln('');
writeln('* ТАБЛИЦА СЛОЖЕНИЯ *');
writeln('');
write('* * ');
for y:=1 to n do
begin
write(y:2);
if y<n then write(' | ')
else writeln(' * ');
end;
writeln('');
for x:=1 to n do
begin
write('* ',x:2, ' * ');
for y:=1 to n do
begin
write(x+y:2);
if y<n then write(' | ')
end;
if x+y<100 then writeln(' * ')
else writeln('* ');
if x<10 then writeln('++')
else writeln('');
end;
end.