Сколько символов содержит сообщение, записанное с 200-символьного алфавита, если его объём составил 1/16 часть килобайта? ответ укажите с пояснением, после цифры
Program fakt; var n,i,z:integer; begin readln(n); z:=1; for i:=2 to n do z:=z*i; writeln(z); end.
Если программу написать так, то максимальный факториал, которой мы сможем вычислить - 12. Можно integer изменить на real, тогда чуть больше сможем вычислить. Так же можно вычислить через массив, тогда где-то 3000 мы сможем получить.
Если же ввести больше 12 в этой программе, то получится переполнение переменой, из-за чего число пойдёт "по кругу". Т.е. мы получим не 3 000 000 000, а -1 000 000 000, т.к. максимальное число у integer - примерно 2 000 000 000
Как все это получается? Сначала складываем в столбик шестнадцатиричные числа. Для этого нужно помнить, что А₁₆=10, B₁₆=11, C₁₆=12, D₁₆=13, E₁₆=14, F₁₆=15. A₁₆+1 = B₁₆. Тут все понятно, после А₁₆ идет В₁₆. С₁₆+С₁₆ = 12₁₀+12₁₀=24₁₀ и теперь надо снова вернуться к шестнадцатиричному числу. 24 - это 16+8, 16₁₀=10₁₆, поэтому 24₁₀=10₁₆+8₁₆ = 18₁₆. Получаем ответ 18B₁₆ Теперь переводим его в двоичную систему, для чего каждую цифру заменяем четырьмя двоичными (16=2⁴). А 8=2³, поэтому теперь справа налево разбиваем число на группы по 3 двоичных разряда и заменяем каждую группу восьмеричной цифрой.
var
n,i,z:integer;
begin
readln(n);
z:=1;
for i:=2 to n do
z:=z*i;
writeln(z);
end.
Если программу написать так, то максимальный факториал, которой мы сможем вычислить - 12. Можно integer изменить на real, тогда чуть больше сможем вычислить. Так же можно вычислить через массив, тогда где-то 3000 мы сможем получить.
Если же ввести больше 12 в этой программе, то получится переполнение переменой, из-за чего число пойдёт "по кругу". Т.е. мы получим не 3 000 000 000, а -1 000 000 000, т.к. максимальное число у integer - примерно 2 000 000 000
+CA
18B₁₆ = 1 1000 1011₂ = 110 001 011₂ = 613₈
Как все это получается?
Сначала складываем в столбик шестнадцатиричные числа.
Для этого нужно помнить, что А₁₆=10, B₁₆=11, C₁₆=12, D₁₆=13,
E₁₆=14, F₁₆=15.
A₁₆+1 = B₁₆. Тут все понятно, после А₁₆ идет В₁₆.
С₁₆+С₁₆ = 12₁₀+12₁₀=24₁₀ и теперь надо снова вернуться к шестнадцатиричному числу. 24 - это 16+8, 16₁₀=10₁₆, поэтому 24₁₀=10₁₆+8₁₆ = 18₁₆. Получаем ответ 18B₁₆
Теперь переводим его в двоичную систему, для чего каждую цифру заменяем четырьмя двоичными (16=2⁴). А 8=2³, поэтому теперь справа налево разбиваем число на группы по 3 двоичных разряда и заменяем каждую группу восьмеричной цифрой.