Проверить признак делимости на 11, и вывести числа кратные 11, не превосходящих заданного m - C (СИ)
Формулировка задачи:
Помогите пожалуйста: Число делится на 11, если разность между суммой цифр, стоящих на нечётных местах, и суммой цифр, стоящих на чётных местах, кратна 11. Проверить этот признак для всех натуральных чисел, не превосходящих заданного m, и вывести числа, кратные 11.
Решение задачи: «Проверить признак делимости на 11, и вывести числа кратные 11, не превосходящих заданного m»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> int main(void) { unsigned n; while ( printf("Number: ") && scanf("%u", &n) == 1 ) { char buf[16]; int i, diff, cnt[2] = { 0 }; sprintf(buf, "%u", n); for ( i = 0; buf[i]; ++i ) cnt[i & 1] += buf[i] - '0'; diff = abs(cnt[0] - cnt[1]); printf("It is %sa multiple of 11\n", ( diff / 11 * 11 == diff ) ? "" : "not "); } return 0; }
Объяснение кода листинга программы
Выводимый на экран список чисел, кратных 11, не превосходящих заданного m, формируется следующим образом:
- Вводится число (Number).
- Число преобразуется в строку (buf).
- Для каждой цифры числа (buf) выполняется следующее:
- цифра вычитается из '0' (получается числовое значение цифры от 0 до 9),
- полученное числовое значение добавляется в соответствующий массив (cnt) с учётом чётности цифры (i & 1).
- Вычисляется разность (diff) между суммами цифр четных и нечётных позиций массива (cnt).
- Проверяется условие: если разность (diff) делится на 11 без остатка, то число (n) кратно 11.
- На экран выводится сообщение о том, является ли число (n) кратным 11.
- После нажатия клавиши
Enter
программа переходит к следующей итерации цикла. В случае, если число (n) не кратно 11, на экран выводится сообщениеIt is not a multiple of 11
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д