1) Записать число в двоичной системе счисления, и степени двойки справа налево: 16,8,4,2,1 2) Пройдитесь по каждой цифре двоичного числа. Если эта цифра 1, запишите соответствующую степень двойки под цифрой. Если эта цифра 0, запишите под цифрой 0. т.е. 16 в первой степени, 8 в нулевой, 4 в первой, 2 в нулевой, 1 в первой 3) сложить полученные результаты
// PascalABC.NET 3.2, сборка 1485 от 15.06.2017 // Внимание! Если программа не работает, обновите версию!
begin Write('Укажите длины массивов А и В: '); var (n1,n2):=ReadInteger2; var a:=ArrRandom(n1,-5,5); Write('A: '); a.Println; var b:=ArrRandom(n2,-5,5); Write('B: '); b.Println; (n1,n2):=(a.Where(x->x=0).Count,b.Where(x->x=0).Count); var c:array of integer; if n1<=n2 then c:=a.Concat(b).ToArray else c:=b.Concat(a).ToArray; Write('C: '); c.Println end.
Тебе нужно привести всё к двойке. 4 это 2 в квадрате, значит 2 в 510 + 2 в 255 - 2 в 8 (это будет 256, берем больше чтобы заполнить всё число, а теперь вычитаем то, что нам не надо) 2 в нулевой (будет 1, т.е 256-1=255) 2 в 510 + 2 в 255 - 2 в 8 +2 в 0
бывает так, что наши "квадраты" стоят не в порядке убывания, тогда расставляем их в порядке убывания. например если бы было 255 +510 -8 мы бы сделали 510+255-8
ну а теперь считаем единицы: первая цифра всегда считается как единица, минус мы считаем 255 - 8 = 247 единиц и одна единица в конце 2в 0 итого получаем первое число всегда единица 1 + минус получился 247 + единица в конце +1 = 249
2) Пройдитесь по каждой цифре двоичного числа. Если эта цифра 1, запишите соответствующую степень двойки под цифрой. Если эта цифра 0, запишите под цифрой 0.
т.е. 16 в первой степени, 8 в нулевой, 4 в первой, 2 в нулевой, 1 в первой
3) сложить полученные результаты
10101 ² = 16^1+8^0+4^1+2^0+1^1= 16+0+4+0+1=21
^ - это возведение в степень