Вывести на экран чётные положительные степени числа 2, не большие, чем 2^n - C (СИ)
Формулировка задачи:
Не могу понять в чём причина. Кажется простая задачка, а проходит всего лишь 10 тестов из 22. Подскажите, пожалуйста, что я не так написал?
Напишите программу, которая вводит натуральное число N и выводит на экран чётные положительные степени числа 2, не большие, чем 2N, в порядке убывания.
Входные данные
Входная строка содержит одно натуральное число N.Выходные данные
Программа должна вывести в одну строчку через пробел чётные положительные степени числа 2, не большие, чем 2N, в порядке убывания. Если таких нет, программа должна вывести число 0.Примеры
Входные данные |
Выходные данные |
| 9 | 256 64 16 4 |
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
if (n < 3)
putchar('0');
else {
int i, j;
unsigned long long pow = 2ULL;
for (i = n - 1; i > 1; --i)
if (!(i & 1)) {
for (j = 0; j < i - 1; ++j)
pow *= 2ULL;
printf("%llu ", pow);
pow = 2ULL;
}
}
putchar('\n');
return 0;
}Решение задачи: «Вывести на экран чётные положительные степени числа 2, не большие, чем 2^n»
textual
Листинг программы
for(;!(n<2);n-=2)
Объяснение кода листинга программы
В данном коде используется цикл for, который выполняется до тех пор, пока условие не станет истинным, то есть пока n < 2 не станет истинным. Внутри цикла присутствует оператор вычисления остатка от деления (!(n<2)). Этот оператор возвращает 1, если n меньше 2, и 0 в противном случае. То есть, цикл будет выполняться до тех пор, пока n не станет чётным. Далее, в теле цикла присутствует операция уменьшения n на 2 (n-=2). Это означает, что после каждой итерации цикла значение n будет уменьшаться на 2. Таким образом, код будет выполнять следующие действия:
- Начать выполнение цикла.
- Пока n не чётное, выполнять следующие действия: a. Уменьшить n на 2.
- После каждой итерации цикла проверять, является ли n чётным. Если да, то выполнение цикла прекращается и происходит переход к следующему шагу.
- Вывести на экран чётные положительные степени числа 2, не большие, чем 2^n. Важно отметить, что в данном коде нет вывода на экран внутри цикла, поэтому он будет выполняться бесконечно, пока не будет остановлен пользователем или не закончится выполнение программы.