Проверить, является ли число N точной степенью двойки (Java -> Си) - C (СИ)
Формулировка задачи:
Точная степень двойки
Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или слово NO в противном случае.
Операцией возведения в степень пользоваться нельзя!
Решение
public class Solution {
public static int recursion(double n) {
// Базовый случай
if (n == 1) {
return 1;
} // Базовый случай
else if (n > 1 && n < 2) {
return 0;
} // Шаг рекурсии / рекурсивное условие
else {
return recursion(n / 2);
}
}
public static void main(String[] args) {
double n = 64;
// вызов рекурсивной функции
if (recursion(n) == 1) {
System.out.println("Yes");
} else {
System.out.println("No");
}Решение задачи: «Проверить, является ли число N точной степенью двойки (Java -> Си)»
textual
Листинг программы
#include<stdio.h>
int recursion(int n);
int main(void)
{
int n;
scanf("%d",&n);
if(recursion(n))
printf("YES\n");
else
printf("NO\n");
return 0;
}
int recursion(int n)
{
if(n==2)
return 1;
if(n%2)
return 0;
else
return recursion(n/2);
}
Объяснение кода листинга программы
- В начале кода подключается стандартная библиотека ввода-вывода
. - Определяется функция recursion(int n), которая будет использоваться для проверки числа на точность.
- В функции main() создается переменная типа int с именем n, в которую считывается число с помощью функции scanf().
- После считывания числа, вызывается функция recursion(n) и результат проверки сохраняется в переменную типа int с именем result.
- Затем выводится сообщение
YESилиNOв зависимости от значения переменной result. - Функция main() возвращает 0, что означает успешный конец работы программы.
- В функции recursion(int n) выполняется проверка: если n равно 2, то функция возвращает 1.
- Если n не равно 2, то выполняется проверка: если n не делится на 2 без остатка, то функция возвращает 0.
- Если n делится на 2 без остатка, то функция вызывает саму себя, передавая в качестве аргумента значение n/2.
- Возвращаемое значение функции recursion(int n) используется для проверки числа на точность в функции main().
- Если функция recursion(int n) вернула 1, то выводится сообщение
YES. - Если функция recursion(int n) вернула 0, то выводится сообщение
NO.