Циклы: обратный отсчет до тех пор, пока все цифры в числе не станут нечетными

#c #loops

Вопрос:

Я пишу программу на языке си, которая считывает введенное число и ведет обратный отсчет от этого числа до тех пор, пока все цифры в числе не станут нечетными. Таким образом, если на входе 22, то на выходе будет: 22, 21, 20, 19. Затем программе необходимо найти среднее значение этих чисел. Проблема в том, что я не знаю, как разбить введенное число на отдельные цифры, чтобы определить, четные они или нечетные. Это то, что я начал:

 #define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

int main(void) {
    int num, sum;
    double avg;

    printf("Enter a number:");
    scanf("%d", amp;num);

    while (num % 2 == 0) {
        printf("%d ", num);
        --num;
        printf("%d ", num);
    }

    return(0);
}
 

После того, как я написал это, я понял, что он может определить только четное или нечетное введенное число, а не отдельные цифры.

Комментарии:

1. Возможно, преобразование строки в число было не самым подходящим местом для начала 🙂 Но, честно говоря, «обратный отсчет» — это не способ решить эту проблему. Если вы делаете это для какого-то соревнования по программированию, это точно.

2. эджкар, разбей проблему на части. Сформируйте функцию int is_all_odd_digits(int x); и используйте ее для выделения наименьшей цифры и /10 уменьшения оставшейся x .

3. И как только этот метод перебора цифр в числе будет освоен, нахождение среднего из них должно быть тривиальным.

4. Предложение: напишите функцию для определения того, было ли достигнуто конечное условие (с /10 помощью и ), и используйте ее в своем состоянии while: while (hasevendigits(num)) { /*...*/ }

5. Да — введите его в виде строки или, если вы не можете избежать ввода int, постройте его с помощью sprintf().

Ответ №1:

Вы должны использовать и /10 вот пример : вы анализируете 15, ваша программа будет 15% 10 -> 5, это нечетное число да / нет, а затем 15/10 ->> 1, это нечетное число да или нет, это все, что вам нужно !