Как записать условие несовпадения количества цифр в шестнадцатеричной и десятичной записях
Количество цифр в шестнадцатеричной и десятичной записях числа не совпадает.
Вот само задание :
Рассматривается множество целых чисел, принадлежащих числовому отрезку [1871; 9197], которые удовлетворяют следующим условиям:
− количество цифр в шестнадцатеричной и десятичной записях числа не совпадает;
− остаток от деления на 9 равен 2 или 4.
Найдите количество таких чисел и минимальное из них.
a=[]
for i in range(1871, 9198):
if (len(hex(i)[2:]) != len(str(i)) and (i%9 == 2 or i%9 == 4)):
a.append(i)
print(len(a),(min(a)))
Ответы (2 шт):
Автор решения: Beret
→ Ссылка
a=[]
for i in range(1871, 9198):
if (len(hex(i)[2:]) != len(str(i)) and (i%9 == 2 or i%9 == 4)):
a.append(i)
print(len(a),(min(a)))
#Спасибо CrazyElf
Автор решения: Алексей Р
→ Ссылка
Немного оптимизировал код за счет сужения диапазона, исключения проверок на длину чисел и сокращение операций нахождения остатка + сэкономил память на списке
diap = 1871, 9198 # десятичных цифр всегда 4 в этом диапазоне
amount, min_n, rest = 0, None, {2, 4} # вместо списка заводим переменные, где будут кол-во чисел и минимум
for i in range(diap[0], min(diap[1], 16 ** 3)): # ограничиваем диапазон сверху, чтобы не проверять кол-во цифр
if i % 9 in rest: # чтобы не находить дважды остаток от деления
amount += 1
if min_n is None:
min_n = i # поскольку диапазон возрастает, то для минимума достаточно взять первое подходящее число
print(f'Кол-во: {amount}, минимальное: {min_n}')
Кол-во: 494, минимальное: 1874