@mimic5447

Как считать длинные числа в Python?

Никак не могу правильно решить задачу. С простыми числам до 10**16 правильный код написать легко, но по условию числа доходят до 10**200, и вычисления становятся такими: 10**40 - (10**40 - 10**40 * 1 / 100). Когда запускаю визуализатор, там числа принимают вид 1e+40, 9.9e+39. На ответе выходит что-то вроде: 99999999999999995387626582021211422720. Как получить точный ответ?

Условие
Дядя Фёдор, Шарик и Матроскин нашли в лесу клад. Но, как известно, перед делёжкой
добычи необходимо заплатить налог государству. Известно, что цена клада I, а размер налога
P %. Рассчитайте сумму, которая должна быть уплачена государству.
Формат входных данных
В первой строке записано натуральное число P (1 <= P <= 99). В второй строке записано
натуральное число I (10**5 <= I <= 10**200).
Формат выходных данных
Выведите одно натуральное число — величину налога, округлённую в большую сторону
(в пользу государства)


p = int(input())
i = int(input())
n = int(i - i * p / 100)
print(i - n)
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
В питоне большие целые числа встроенные. Но только целые.
Если вы хотите соранить всю точность, то вам нельзя использовать числа с плавающей точкой. В вашем коде у вас деление на 100, которое и приводит к преобразованию в float и потерю точности. Замените деление на целочисленное и ответ будет точным.

i - i * p // 100 посчитает точно, но там окргуление при делении будет вниз. Чтобы округлить вверх, можно воспользоваться хитростью - прибавть в числитель знаменатель -1: (i * p + 99) // 100 округлит вверх.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы