#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, это нечетное число да или нет, это все, что вам нужно !