Проверка делимости числа на 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;
}

Объяснение кода листинга программы

  1. Объявление переменных:
    • char number[10000] - строка для ввода числа
    • int length - длина числа
    • int i - счётчик для циклов
    • int divisible - флаг для определения делимости числа на 11
  2. Запрос на ввод числа и сохранение его в переменную number.
  3. Вычисление длины строки number с помощью функции strlen.
  4. Проверка на корректный ввод: если длина числа меньше 2, программа завершается.
  5. Преобразование каждого символа в строке number в числовое значение (из строки в число).
  6. Два вложенных цикла:
    • Первый цикл проверяет, если текущий элемент больше следующего, то меняет их местами и добавляет к последнему 11 - значение предыдущего элемента.
    • Второй цикл проверяет, если текущий элемент меньше следующего, то меняет их местами и вычитает значение предыдущего элемента из текущего.
    • Если текущий элемент равен следующему, то оба элемента становятся равными нулю.
  7. Установка начального значения для переменной divisible (далее да).
  8. Цикл проверки каждого элемента строки number на равенство нулю. Если элемент не равен нулю, то значение переменной divisible меняется на нет.
  9. Проверка значения переменной divisible. Если оно равно да, то выводится сообщение the number is divisible by 11, иначе выводится сообщение the number isn't divisible by 11.
  10. Завершение программы.

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы