Главная страница
Навигация по странице:

  • Решение ( использование программы )

  • Решение (использование программы на Java, М. Коротков): язык Java позволяет работать с большими числами с помощью типа BigInteger

  • ЦУЙУ. Позиционные системы счисления


    Скачать 0.86 Mb.
    НазваниеПозиционные системы счисления
    Дата15.09.2022
    Размер0.86 Mb.
    Формат файлаdoc
    Имя файлаege14 (1).doc
    ТипДокументы
    #678195
    страница2 из 15
    1   2   3   4   5   6   7   8   9   ...   15

    Пример задания:


    Р-25. (демо-2021) Значение арифметического выражения: 497 + 721 – 7 – записали в системе

    счисления с основанием 7. Сколько цифр 6 содержится в этой записи?

    Решение:

    1. приведём все числа к степеням семерки, учитывая, что 49 = 72

    714 + 721 – 71

    1. расставим степени в порядке убывания:

    721 + 714 – 71

    1. Очевидно, что «шестёрки» в семеричной записи значения выражения возникнут только за счёт вычисления разности 714 – 71, их количество равно 14-1=13

    2. Ответ: 13.

    Решение (использование программы):

    1. язык Python позволяет работать с большими числами, не задумываясь о том, что для их хранения требуется больше памяти, чем для «обычного» целого числа (когда значение не помещается в 4 байта, интерпретатор автоматически переходит на представление числа в виде массива с «длинной арифметикой»)

    2. поэтому может быть написана программа, которая вычисляет нужное значение и методом деления в столбик определяет все цифры его записи в семеричной системе счисления; шестёрки считаем с помощью счётчика count6:

    x = 49**7 + 7**21 - 7

    count6 = 0

    while x:

    if x % 7 == 6: count6 += 1

    x //= 7

    print( count6 )

    1. Ответ: 13.

    Решение (использование программы в среде Pascal ABC.NET, А. Агафонцев):

    1. Pascal ABC.NET за счет использования фреймворка .NET позволяет воспользоваться типом System.Numerics.BigInteger (предназначенным для произвольно больших целых со знаком) и связанными с ним функциями.

    2. Таким образом, программа получается во многом схожей с программами на Python. Особо отметим, что использование функций возведения в степень не связанных с типом BigInteger для систем с основанием, не являющимся степенью двойки, приводит к неверным результатам из-за использования вещественных чисел. Например, BigInteger(power(9,34)) или BigInteger(9 ** 34) преобразуют вещественное число в целое произвольно большой длины, но еще при операции возведения в степень потеряется часть идеальной, математической мантиссы.

    3. В связи с вышесказанным допустимо только использование записей вида BigInteger.Pow(9,34).

    4. Полная программа:

    var

    a: BigInteger;

    k: int64;

    begin

    a := BigInteger.Pow(49, 7) + BigInteger.Pow(7, 21) - 7;

    k := 0;

    while (a > 0) do

    begin

    if (a mod 7 = 6) then

    k := k + 1;

    a := a div 7;

    end;

    writeln(k);

    end.

    1. Ещё одно решение на PascalABC.NET (П.Е. Финкель)

    begin

    var k:=0;

    var x:=49bi**7+7bi**21-7;

    while x>0 do begin

    if x mod 7=6 then k+=1;

    x:=x div 7;

    end;

    println(k);

    end.

    1. здесь «bi» длинным, а ** означает возведение в степень

    2. Ответ: 13.

    Решение (использование программы на Java, М. Коротков):

    1. язык Java позволяет работать с большими числами с помощью типа BigInteger;

    2. может быть написана программа, которая вычисляет значение арифметического выражения и методом деления в столбик определяет все цифры его записи в семеричной системе счисления; шестёрки считаем с помощью счётчика amt6:

    3. полная программа:

    import java.math.BigInteger;
    public class Main {
    public static void main(String[] args) {
    final BigInteger SIX = BigInteger.valueOf(6);
    final BigInteger SEVEN = BigInteger.valueOf(7);
    final BigInteger NUM1 = BigInteger.valueOf(49).pow(7);
    final BigInteger NUM2 = BigInteger.valueOf(7).pow(21);

    BigInteger num = NUM1.add(NUM2).subtract(SEVEN);


    BigInteger amt6 = BigInteger.ZERO;
    while (!num.equals(BigInteger.ZERO)) {
    if (num.mod(SEVEN).equals(SIX)) {
    amt6 = amt6.add(BigInteger.ONE);
    }
    num = num.divide(SEVEN);
    }
    System.out.println(amt6);
    }
    }


    1. Ответ: 13.
    1   2   3   4   5   6   7   8   9   ...   15


    написать администратору сайта