Вас просят проверить, является ли число, переданное в качестве аргумента функции, степенью 2, а если это так, то какова степень 2, которая суммирует до aNumber
.(2^x = aNumber
) - вы хотите найти x
.
Например, если вы передадите 8 функции, вы должны вернуть 3, поскольку 2^3 = 8
.Но если число не является степенью 2, вы должны вернуть -1 - например, если параметр равен 9, нет целой степени 2, которая может привести к 9.
Что касается вашей программы, выможет заставить его работать с некоторыми незначительными изменениями:
Что вы хотите сделать, это сделать цикл и на каждой итерации проверять, делится ли входное число на 2 (aNumber % 2 == 0
), и делит ли оно надва (aNumber = aNumber / 2
).Если вы можете добраться до 1 таким образом, это означает, что ваше число является степенью двойки, и вам просто нужно сосчитать итерации (количество раз, которое вы поделили aNumber
на 2).Таким образом, ваша функция может выглядеть так:
private static int powerOf2(int aNumber)
{
int power = 0;
if(aNumber % 2 != 0)
{
return -1;
}
else
{
System.out.print(aNumber + " is 2 raised to ");
while (true)
{
if(aNumber % 2 == 0){
aNumber /= 2;
power++;
if(aNumber == 1) return power;
}else{
return -1;
}
}
}
}