• В случае с усложнённым заданием теперь программа не только будет ПРОСИТЬ пользователя ВВЕСТИ ЧИСЛО ДЛЯ ВОЗВЕДЕНИЯ В СТЕПЕНЬ и саму степень... Программа будет должна осуществлять дополнительную проверку на то больше результат по модулю, чем число 2147483647 или нет, если да, то предупреждать об этом пользователя («Опасность! Результат больше чем … »)Комментарий по ходу выполнения программы давать вразумительный и обязательный.


    Пример работы программы такой:

    На экране появляется фраза типа

    «Введите целое число»

    Введите его степень»

    Юзер вводит два целых числа (пускай 5 и 30)

    Программа сообщает:

    «Внимание! Результат 5^30 выходит за пределы типа INTEGER, 2147483647!!! Тем не менее, Ваш результат равен ….»

    Или если всё в порядке, то программа сообщит пользователю: «Всё ОК. Результат: …»

Ответы 7

  • В чем разница?
  • Результат всеравно biginteger, нет?
    • Автор:

      milo76
    • 5 лет назад
    • 0
  • Разница в том, что обычно тип результата операции х для "A x B" выбирается по типу того из операндов, который имеет бОльшую разрядность. Если Вы используете операцию вида < integer > x < integer > то ее результат будет тоже integer. Вас немного спасло (но не надолго) то, что A**B - это не обычная операция, а синоним некоторой функции, которая в своей внутренней реализации для некоторого количества умножений сама использует преобразование к BigInteger.
    • Автор:

      beastacfj
    • 5 лет назад
    • 0
  • Стоило это количество превысить - и получили стандартный вызов Power(A,B), которая рассчитывается через экспоненту от логарифма, т.е. работает с плавающей точкой. Можно проверить написанное выше обычным умножением.
  • begin var k:=123456789; Writeln(k*k); Writeln(BigInteger(k*k)); Writeln(BigInteger(k)*k)end.
  • //PascalABC.NET//Версия 3.3, сборка 1634 (14.02.2018)begin  var (n,i):=ReadInteger2('Введите целое число и его степень->');  If n**i>Integer.MaxValue   then WritelnFormat('Внимание! Результат {0}^{1} выходит за пределы типа INTEGER, 2147483647!!! Тем не менее, Ваш результат равен {2}',n,i,biginteger(n**i))  else Println('Всё ОК. Результат:',n**i);end.
  • PascalABC.NET 3.3.5, сборка 1650 от 01.04.2018Внимание! Если программа не работает, обновите версию!begin  var (a,b):=ReadInteger2('Введите целые основание и показатель степени:');  var bigA:=BigInteger(a);  var r:=bigA**b;  if r>integer.MaxValue then begin    Write($'Внимание! Результат {a}^{b} выходит за пределы типа INTEGER, ');    Writeln(integer.MaxValue, '!!!');    Writeln('Тем не менее, Ваш результат равен ',r)    end  else    Writeln($'Все ОК. Результат {a}^{b}={r}')end.ПримерыВведите целые основание и показатель степени: 12 6Все ОК. Результат 12^6=2985984Введите целые основание и показатель степени: 5 30Внимание! Результат 5^30 выходит за пределы типа INTEGER, 2147483647!!!Тем не менее, Ваш результат равен 931322574615478515625
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years