Длинная арифметика - C (СИ)
Формулировка задачи:
Доброе время суток.
Я разбираю длинную арифметику. И есть некоторые вопросы.
К примеру возьмем Сложение.
Вот что оно выбивает после компиляции:
111+222= 3334
Не могу понять почему оно пишет 4, но в этом случаи у меня length=4.
Будьте добры помогите с окончанием.
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(); }
Решение задачи: «Длинная арифметика»
textual
Листинг программы
if (b[length - 1] == 0) * * * * * *// b[5-1]=4 != 0 * * * * length--; * * * * * * * * * * *// => length=5
Объяснение кода листинга программы
В данном коде выполняется следующие действия:
- Проверяется условие
b[length - 1] == 0
. - Если условие истинно, то выполняется последовательность действий:
- Уменьшается значение переменной
length
на единицу (length--;
). - Проверяется условие
length != 0
.
- Уменьшается значение переменной
- Если второе условие истинно, то выполняется следующая последовательность действий:
- Переменной
length
присваивается значение5
(length = 5
). - Выполняется последовательность действий, выделенная звездочками (
* * * * * * * * * *
). Таким образом, код выполняет проверку последнего элемента массиваb
на равенство нулю. Если это условие истинно, то длина массива уменьшается на единицу и проверяется на неравенство нулю. Если второе условие истинно, то длина массива устанавливается равной 5 и выполняется непонятная последовательность действий, выделенная звездочками.
- Переменной
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д