Найти - Пользователи
Полная версия: Не понимаю в чем ошибка
Начало » Python для новичков » Не понимаю в чем ошибка
1
Lanaya
Вот такое задание: Значение арифметического выражения 7**100 + 7**30 – х, где х – натуральное число,
меньшее, чем 720, записали в системе счисления с основанием 7 Определите наибольшее
количество нулей, которое может содержать семиричная запись значения данного
арифметического выражения.
Вот мой код:
for x in range(10000):
a=7**100+7**30-x
w=
while a>0:
w=+w
a=a//7
print(w.count(0))
Выдает ответ 70, хотя правильно 89, не понимаю в чем ошибка.
Alex.Pro.
Во-первых. Чтобы ваш код было легче читать, используйте квотирование! Не вставляйте код в сообщение как простой текст.
Lanaya
Выдает ответ 70, хотя правильно 89, не понимаю в чем ошибка.
А во-вторых… Почему вы считаете что правильно 89? Я согласен с вашей программой - семеричная запись результата вашего арифметического выражения будет содержать 70 нулей.
Об,ясняю. 7**100 - это единица с сотней нулей. 7**30 - это единица с тридцатью нулями. 7**100 + 7**30 (справа налево): тридцать нулей, единица, 69 нулей и опять единица. Чтобы последовательность нулей стала длиннее, мы что-то вычитаем (по условию, максимум 2046(7) = 720(10)). При этом единица в 30-ом разряде превращается в 0, а после неё появляется длинная цепочка шестёрок. Всё! Мы получили 70 нулей и это предел для нашего условия. Чтобы получить больше нулей, требуется вычитать число, сравнимое с 7**30.
Не ругайте сильно свой код. Я не понимаю как он работает, но результат получился правильный.
py.user.next
Alex.Pro.
Мы получили 70 нулей и это предел для нашего условия. Чтобы получить больше нулей, требуется вычитать число, сравнимое с 7**30.
Если мы вычтем 49, то получится 72 нуля там.
1 0 0 ... 0 0 1 0 0 ... 0 0 - 100 = 1 0 0 ... 0 0 0 6 6 ... 6 6 0 0
Похоже, надо переборный код написать.
Alex.Pro.
py.user.next
Если мы вычтем 49, то получится 72 нуля
Упс. Изначально я неправильно понял условие. Мне показалось что требуется определить наибольшее непрерывное количество последовательных нулей. Если убрать требование непрерывности последовательных нулей, тогда максимальное кол-во нулей получится в результате вычисления 7**100+7**30-7**3. Всего 73 нуля: единица, 70 нулей, 27 шестёрок и ещё 3 нуля. Обнулить больше цифр (в более старших разрядах) мы не можем по условию.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB