Деление больших чисел занимает много времени - C (СИ)

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

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

Привет всем. Написал функцию для деления больших чисел, но к сожалению вычисления идут очень долго. Может кто-нибудь помочь с переделкой этой функции ?
Листинг программы
  1. int Div(int *S, int *S1, int n, int n1, char A[], char B[])
  2. {
  3. int t = SizeOfDec(n, n1);
  4. int *S3 = S, i = 0, *S31, *S11;
  5. int u = ComparingNumber(S, S1, n, n1);
  6. for (; u>0; i++)
  7. {
  8. S3 = Dec(S3, S1, n, n1, t);
  9. for (long long int i = t - 1; i >= 0; i--)
  10. {
  11. if (S3[i] == 0)
  12. {
  13. t--;
  14. }
  15. if (S3[i] != 0)break;
  16. }
  17. S31 = TurnArray(S3, t);
  18. ///PrintArray2(S31, t);
  19. ///printf("\n");
  20. S11 = TurnArray(S1, n1);
  21. ///PrintArray2(S11, n1);
  22. ///printf("\n");
  23. u = ComparingNumber(S31, S11, t, n1);
  24. }
  25. return i;
  26. }
Вот вспомогательные функции
Листинг программы
  1. int ComparingNumber(int *S1, int *S2, int n, int n1)
  2. {
  3. int t;
  4. if (n > n1) t = 1;
  5. if (n < n1) t = 0;
  6. if (n == n1)
  7. {
  8. for (int i = 0; i <n; i++)
  9. {
  10. if (S1[i]>S2[i])
  11. {
  12. t = 1;
  13. break;
  14. }
  15. if (S1[i] < S2[i])
  16. {
  17. t = 0;
  18. break;
  19. }
  20. if (S1[i] == S2[i])
  21. {
  22. t = -1;
  23. }
  24. }
  25. }
  26. return t;
  27. }
  28. int* TurnArray(int *S, int n)
  29. {
  30. int* S3 = (int*)malloc(sizeof(int)*n);
  31. for (int i = 0, i1 = 1; i<n; i++, i1++)
  32. {
  33. S3[i] = S[n - i1];
  34. if (S[n-i1] < 0) S3[i] = 0;
  35. }
  36. return S3;
  37. }

Решение задачи: «Деление больших чисел занимает много времени»

textual
Листинг программы
  1. int ComparingNumber(int *S1, int *S2, int n, int n1)
  2. {
  3.   int res;
  4.  
  5.   if (n < n1) res = -1;
  6.   else if (n > n1) res = 1;
  7.   else res = memcmp(S1, S2, n * sizeof(*S1));
  8.  
  9.   return res;
  10. }

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

В данном коде представлена функция с именем ComparingNumber, которая принимает четыре аргумента:

  1. S1 - указатель на первый массив.
  2. S2 - указатель на второй массив.
  3. n - размер первого массива в элементах.
  4. n1 - размер второго массива в элементах. Далее в функции происходит сравнение двух массивов по элементам:
  5. Если размер первого массива меньше размера второго, то в переменную res записывается значение -1.
  6. Если размер первого массива больше размера второго, то в переменную res записывается значение 1.
  7. В противном случае, происходит сравнение элементов массивов с использованием функции memcmp. Значение -1, 0 или 1 записывается в переменную res. В итоге, функция возвращает найденное значение в переменной res.

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


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

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

14   голосов , оценка 3.857 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы