Длинная арифметика - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброе время суток. Я разбираю длинную арифметику. И есть некоторые вопросы. К примеру возьмем Сложение.
    int a[3], b[3], length, i=0, j=0, r=0;
    int size_a, size_b;
 
    // числа, которые будут сложиваться, предположительно записаны в массивы a и b
    // НО они записаны “зеркально”.
    // Размеры длин чисел хранятся в переменных size_a и size_b
 
    //
    printf("\n 1 masiv: \n");
    for (i=0; i<3; i++) {
        printf("\t");
        scanf("%d", &a[i]);
        }
    size_a=i;
 
    printf("\n size_a && i= %d", i);
 
    //
    printf("\n 2 masiv: \n");
 
    for (j=0; j<3; j++) {
        printf("\t");
        scanf("%d", &b[j]);
        }
    size_b=j;
 
    printf("\n size_b && j= %d", j);
 
     // определяем длину массива суммы // a[4]; b[3]
    if (size_a > size_b)               // 4>3
        length = size_a + 1;           // length = 4+1=5
    else
        length = size_b + 1;
 
    for (int ix = 0; ix < length; ix++) {
        b[ix] += a[ix];             // суммируем последние разряды чисел
        b[ix + 1] += (b[ix] / 10);  // если есть разряд для переноса, переносим его в следующий разряд
        b[ix] %= 10;                // если есть разряд для переноса он отсекается
    }
 
    if (b[length - 1] == 0)            // b[5-1]=4 != 0
        length--;                      // => length=5
                         // число будет храниться в массиве b и выводить его следует с конца
    printf("\n\n ");
 
    for (r = 0; r < length; r++) {
        printf("%d", b[r]);
    }
 
    getch();
}
Вот что оно выбивает после компиляции: 111+222= 3334 Не могу понять почему оно пишет 4, но в этом случаи у меня length=4. Будьте добры помогите с окончанием.

Решение задачи: «Длинная арифметика»

textual
Листинг программы
if (b[length - 1] == 0) * * * * * *// b[5-1]=4 != 0
* * * * length--; * * * * * * * * * * *// => length=5

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

В данном коде выполняется следующие действия:

  1. Проверяется условие b[length - 1] == 0.
  2. Если условие истинно, то выполняется последовательность действий:
    • Уменьшается значение переменной length на единицу (length--;).
    • Проверяется условие length != 0.
  3. Если второе условие истинно, то выполняется следующая последовательность действий:
    • Переменной length присваивается значение 5 (length = 5).
    • Выполняется последовательность действий, выделенная звездочками (* * * * * * * * * *). Таким образом, код выполняет проверку последнего элемента массива b на равенство нулю. Если это условие истинно, то длина массива уменьшается на единицу и проверяется на неравенство нулю. Если второе условие истинно, то длина массива устанавливается равной 5 и выполняется непонятная последовательность действий, выделенная звездочками.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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