AlidzhanovDenis491
?>

50 за сколько единиц в двоичной записи числа (2^2018)−2018?

Информатика

Ответы

anaissite6
2^2018 в двоичной системе есть единица и 2018 нулей. 2018=2048-32+2
(исходное выражение трансформировалось в 2^2018-2048+32-2)
2048=2^11 (единица и 11 нулей)
32=2^5 (единица и 5 нулей)
2=10 :)
Для начала прибавлю к 2^2018 100000. Получится число, у которого (с конца) 5 нулей, затем единица, затем идут 2012 нулей и снова единица.
Теперь буду вычитать 2 т .е. 100...100000-10. Займу единицу с шестой с конца позиции. Будет 100...011110. Теперь нужно вычитать из этого числа 2^11. Последние 11 позиций не изменятся (вычитаются нули), а вот для вычета единицы потребуется "зянять" её у самой первой цифры числа. Если нарисовать последние 12 цифр исходного числа, картинка будет следующая: 
1...000000011110
-   100000000000

0...111111111110
Осталось узнать, сколько единичек стояло на месте многоточия. В 2^11 было 12 цифр, соответственно, получаем 2018-12=2006 позиций, на которых стоят нули. К этим позициям нужно добавить 11 единиц, которые видны в "столбике".
Итого 2006+11=2017 единиц\
P.S. если понятен принцип решения, советую перерешить еще раз, потому что у меня очень плохо с арифметикой. 

***
Есть очень хорошее свойство: некое десятичное число n^m в переводе в n-ичную систему счисления будет в этой системе счисления выглядеть как единица и m нулей. Свойство довольно очевидное: при переводе из десятичной системы в n-ичную мы исходное число будем делить на n, т.е. получим остаток от деления 0 и частное n^(m-1). И так будет продолжаться m раз, пока мы не разделим число само на себя и получим единицу в последнем частном. Отсюда 1 и m нулей.
Pavel1545

type

 Str = record

         fio: string;

         h: byte;

       end;

var

 base: array of Str;

 i,sum,n,err:integer;

 

begin

write('Число учеников: '); readln(n);

setlength(base,n);

sum:=0;

writeln('Введите фамилию и рост через "space": ');

for i:=0 to n-1 do

 begin

   write(i+1:4,'. ');

   readln(base[i].fio);

   

   val(copy(base[i].fio,

            pos(' ',base[i].fio)+1,  

            length(base[i].fio)-pos(' ',base[i].fio)),

       base[i].h,  

       err);

   delete(base[i].fio,

          pos(' ',base[i].fio),

          length(base[i].fio));

   sum:=sum+base[i].h;

 end;

writeln('Средний рост: ',sum/n:4:1);

for i:=0 to n-1 do

 if base[i].h<sum/n then

   writeln(base[i]);

end.

zazaza74
#include <iostream>
using namespace std;
int main() {
        int mat[3][3];
        int k;
        int size=0;
        int * arr=0;
        for(int i=0;i<3;i++){
                for(int j=0;j<3;j++){
                       cin>>mat[i][j];
                          if (mat[i][j]>0){
                             arr=(int*)realloc(arr,sizeof(int)*(++size));
                             arr[size-1]=mat[i][j];
                                             }
                                           }
                                    }
                  for(int i=0;i<size;i++){
                  cout<<arr[i];
                  }
               delete arr;
               cin.get();
               cin.get();
              return 0;
}

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

50 за сколько единиц в двоичной записи числа (2^2018)−2018?
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

valera850515
Voronov434
vdnh451
irkm8
Dampil
Staroverovanatasa494
Bella
Puschdom
Butsan-Bagramyan
sryzhova6392
akbmaslafarkop3175
vasavto1
irohmichaelchikaodiri
innavinogradova1385
Кирилл-Анна1023