m>20
n>20
Длинная
арифметика!
char numerator[N];
char denominator[N];
Const int N = 100000; // Заведём константу
И введём наши числа:
Input (char[], &int);
Длина числа
Int m = длина делимого
Int n = длина делителя
Для начала разберёмся с вводом) Из условия видно, что подаются два числа в виде строк
Массив для ввода
Пока мы не нажмём ENTER:
Array[i] = getchar()-48;
(-48(код ‘0’)) – переделываем
из кода цифры в саму цифру
Int i =0;
i ++;
Array = {
}
0 1 2 3 4 5 6 7 8 9 10 11 12 13
m = i (устанавливаем длину числа)
5
7
3
1
8
2
5
4
9
2
5
8
3
1
И тут мы понимаем что нам нужен ещё один массив для хранения остатка, ведь постоянно менять делимое не так то и удобно, поэтому мы заводим ещё один массив с именем modulo
char modulo[N];
// И заполним мы его как первое уменьшаемое (то есть мы поместим в него ту часть делимого которая является минимально возможной, чтобы хотя б один раз поделить на наш делитель )
FirstMinuend (numerator,m,denominator,n,modulo,nMod);
Int nMod = размер
5
7
3
1
8
2
5
4
9
1
2
5
8
3
На самом деле мы в ней просто ищем то самое первое уменьшаемое
Для чего оно нужно? Узнаете позже
nMod = n
modulo = {
}
m = 14
n = 11
Дальше мы смотрим при помощи функций More и Equally, больше или равен Modulo делимому,
Если это так, то функция прекращает работу, иначе мы добавляем ещё одну цифру
в Modulo, в этом собственно и суть отдельного метода. В нашем же случае снесём ещё цифру
11
nMod = n+1
0 1 2 3 4 5 6 7 8 9 10
5
5
7
3
1
8
2
5
4
9
1
2
numerator = 57318254912583
startIndex
Subtract(char a[], int &n, char b[], int &m)
Длина уменьшаемого
Длина вычитаемого
Уменьшаемое
Вычитаемое
Subtract – разберём работу данной функции
-
< 0
Loan = -1
5
0
8
4
3
0
0
8
1
2
2
6
573182549125
________________
064752467899
+10
+
Вычитание прекратится, когда modulo станет равно 055162805933
то есть меньше 064752467899
Не сложно заметить что в начале каждого из чисел стоят нули, а значит их нужно убрать!
Для этого можно воспользоваться простой, написанной функцией DeleteZero
Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть