В интервью была задана следующая проблема. Учитывая число 11 n (где n
∈ [0, 1000]
), получите результат 1
s. Так, например, п = 3, 11 = 1331, так что ожидаемый результат будет 2. Или дано п = 6, 11 = 1771561, ожидаемый результат будет 3.Рассчитать количество единиц в результате 11^n
Моя первая мысль была что он должен был что-то сделать с pascal's triangle и binomial coefficients (потому что, как мы знаем, просто вычисление pow(11, 1000)
не работает, по крайней мере, в C).
Я думал, что просто перебирать столбцы в треугольнике паскаля должен дать мне результат, но это явно не работает.
Так что я сейчас застрял. Моя следующая мысль заключалась в том, чтобы использовать какой-то bignum library
для решения проблемы, но, на мой взгляд, должен быть другой способ решить эту задачу.
Обновление Я забыл упомянуть, что я должен был решить эту задачу с помощью C/Objective-C.
Вам не нужны никакие bignum библиотеки умножить на 11 :-) –
Python может подсчитать количество '1's в' 11^100000' в о '2.09s', так и для ваших ограничений, библиотека bignum должна работать. Я не думаю, что есть какое-то аналитическое решение этой проблемы. – Blender
Звучит как отличный кандидат для предварительной обработки. – cheeken