2014-11-04 3 views
-2

Это код, который я создал, чтобы найти наибольшую мощность в 2 фактора. Я не думаю, что это на 100% правильно, потому что я получаю 2 ответа. Мне нужна помощь в этом. Я совершенно новый в программировании.Поиск наибольшей мощности 2?

МОЙ КОД:

def largestPowerOfTwoThatIsAFactorOf(num): 

    factor = 2 

    while not(num > 0): 

     factor = factor + 1 

    return factor 


print(largestPowerOfTwoThatIsAFactorOf(4)) 
print(largestPowerOfTwoThatIsAFactorOf(15)) 
print(largestPowerOfTwoThatIsAFactorOf(120)) 

#For any odd integer, largest power of 2 that’s a factor is 1. 
+1

'while not (num> 0)' означает: «запустить цикл, если число равно 0 или меньше». Это не приведет к запуску цикла для положительных чисел. Для 0 он выполнит цикл один раз и вернет функцию 3. Это не сила двух. Вы должны ** подумать о ** алгоритме ** перед тем, как ** закоротить код вслепую в компьютер. –

+0

не начинайте с 'factor = 2' – hjpotter92

+0

сложно, когда вы полный новичок, я стараюсь изо всех сил @ TheParamagneticCroissant –

ответ

-2
def largestPowerOfTwoThatIsAFactorOf(num): 
    if num % 2 != 0: return 1 
    factor = 0 
    while num % 2 == 0: 
     num /= 2 
     factor += 1 
    return 2 ** factor 
    ## or return factor; as per your requirement 

Вам необходимо обновить num внутри цикла. Кроме того, вы немного оптимизируете код, проверяя, был ли вход нечетным или нет в первом утверждении.

+0

' factor + = 1' не вернет силу двух. это 'factor * = 2'. –

+0

@ TheParamagneticCroissant http://codepad.org/lbMCNgSP Он возвращает полномочия 2 – hjpotter92

+0

Мне что-то не хватает, но с тех пор, как 3 считается силой двух? –

Смежные вопросы