Проверить признак делимости на 11 - C (СИ)
Формулировка задачи:
Число делится на 11, если разность между суммой цифр, стоящих на нечётных местах, и суммой цифр, стоящих на чётных местах, кратна 11. Проверить этот признак для всех натуральных чисел, не превосходящих заданного , и вывести числа, кратные 11.
Вот код. Скажите что не так
#include <stdio.h> #include <stdlib.h> int main() { int i,d,d1=0,d2=0,sumd1=0,sumd2=0,c=0,r=0; printf("Vvedite d\n"); scanf("%i",&d); for(i=1;i<=d;i++) { d2=d; while (d2>0) { d1=i%10; c++; if(c%2==0) sumd1+=d1; else sumd2+=d2; d2=i/10; } r=sumd2-sumd1; if(r%11==0) printf("%i ",r); else printf("NO\n"); } return 0; }
Решение задачи: «Проверить признак делимости на 11»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> int main() { int d,d2=0,sumd1=0,sumd2=0,c=0,r=0,raznica; printf("Vvedite d\n"); scanf("%i",&d); for(d2=d; d2>(-1); d2--){ d2=d; while (d2>0) { r=d2%10; c++; if(c%2==0) sumd1+=r; else sumd2+=r; d2=d2/10; } raznica=sumd2-sumd1; if(raznica%11==0) printf("YES\n"); else printf("NO\n"); } return 0;
Объяснение кода листинга программы
В этом коде проверяется, делится ли введенное число на 11. Вот список действий, которые происходят в коде:
- Вводится число d с помощью функции scanf.
- Инициализируются переменные d2, sumd1, sumd2, c, r и raznica со значениями 0.
- Выводится сообщение
Vvedite d
с помощью функции printf. - Для каждого введенного числа d выполняются следующие действия:
- d2 присваивается значение d.
- d2 разбивается на отдельные цифры, начиная с самой правой, с помощью цикла while и операции % (остаток от деления).
- Для каждой цифры выполняются следующие действия:
- r присваивается значение текущей цифры.
- c увеличивается на 1.
- Если c четное (т.е. делится на 2 без остатка), то r добавляется к sumd1.
- Если c нечетное, то r добавляется к sumd2.
- d2 уменьшается на 10 с помощью операции / (целочисленное деление).
- raznica вычисляется как разница между sumd2 и sumd1.
- Проверяется, делится ли raznica на 11 без остатка. Если да, то выводится
YES
, в противном случае выводитсяNO
.
- Цикл завершается, когда d2 становится отрицательным.
- Программа возвращает 0, заканчивая свою работу.