Проверка делимости числа на 11 - C (СИ)
Формулировка задачи:
Вводится число от 0 до 10^1000
Нужно проверить на делимость на 11
Решение задачи: «Проверка делимости числа на 11»
textual
Листинг программы
#include <stdio.h> #include <string.h> #define YES 1 #define NO 0 int main(void) { char number[10000]; int length; int i; int divisible; printf("please enter a number: "); scanf("%s", number); length = strlen(number); if (strlen(number) < 2) return 0; for (i=0; i<length; ++i) { number[i] = number[i] - '0'; } for (i=1; i<length; ++i) { if (number[i-1] > number[i]) { number[i] = 11 - number[i-1] + number[i]; number[i-1] = 0; } else if (number[i-1] < number[i]) { number[i] = number[i] - number[i-1]; number[i-1] = 0; } else number[i-1] = number[i] = 0; } divisible = YES; for (i=0; i<length; ++i) if (number[i]!=0) divisible = NO; if (divisible==YES) puts("the number is divisible by 11"); else puts("the number isn't divisible by 11"); return 0; }
Объяснение кода листинга программы
- Объявление переменных:
- char number[10000] - строка для ввода числа
- int length - длина числа
- int i - счётчик для циклов
- int divisible - флаг для определения делимости числа на 11
- Запрос на ввод числа и сохранение его в переменную number.
- Вычисление длины строки number с помощью функции strlen.
- Проверка на корректный ввод: если длина числа меньше 2, программа завершается.
- Преобразование каждого символа в строке number в числовое значение (из строки в число).
- Два вложенных цикла:
- Первый цикл проверяет, если текущий элемент больше следующего, то меняет их местами и добавляет к последнему 11 - значение предыдущего элемента.
- Второй цикл проверяет, если текущий элемент меньше следующего, то меняет их местами и вычитает значение предыдущего элемента из текущего.
- Если текущий элемент равен следующему, то оба элемента становятся равными нулю.
- Установка начального значения для переменной divisible (далее
да
). - Цикл проверки каждого элемента строки number на равенство нулю. Если элемент не равен нулю, то значение переменной divisible меняется на
нет
. - Проверка значения переменной divisible. Если оно равно
да
, то выводится сообщениеthe number is divisible by 11
, иначе выводится сообщениеthe number isn't divisible by 11
. - Завершение программы.