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

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

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

Привет всем. Написал функцию для деления больших чисел, но к сожалению вычисления идут очень долго. Может кто-нибудь помочь с переделкой этой функции ?
int Div(int *S, int *S1, int n, int n1, char A[], char B[])
{
    int t = SizeOfDec(n, n1);
    int *S3 = S, i = 0, *S31, *S11;
    int u = ComparingNumber(S, S1, n, n1);
    for (; u>0; i++)
    {
        S3 = Dec(S3, S1, n, n1, t);
        for (long long int i = t - 1; i >= 0; i--)
        {
            if (S3[i] == 0)
            {
                t--;
            }
            if (S3[i] != 0)break;
        }
        S31 = TurnArray(S3, t);
        ///PrintArray2(S31, t);
        ///printf("\n");
        S11 = TurnArray(S1, n1);
        ///PrintArray2(S11, n1);
        ///printf("\n");
        u = ComparingNumber(S31, S11, t, n1);
    }
    return i;
}
Вот вспомогательные функции
int ComparingNumber(int *S1, int *S2, int n, int n1)
{
    int t;
    if (n > n1) t = 1;
    if (n < n1) t = 0;
    if (n == n1)
    {
        for (int i = 0; i <n; i++)
        {
            if (S1[i]>S2[i])
            {
                t = 1;
                break;
            }
            if (S1[i] < S2[i])
            {
                t = 0;
                break;
            }
            if (S1[i] == S2[i])
            {
                t = -1;
            }
        }
    }
    return t;
}
int* TurnArray(int *S, int n)
{
    int* S3 = (int*)malloc(sizeof(int)*n);
    for (int i = 0, i1 = 1; i<n; i++, i1++)
    {
        S3[i] = S[n - i1];
        if (S[n-i1] < 0) S3[i] = 0;
    }
    return S3;
}

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

textual
Листинг программы
int ComparingNumber(int *S1, int *S2, int n, int n1)
{
  int res;
  
  if (n < n1) res = -1;
  else if (n > n1) res = 1;
  else res = memcmp(S1, S2, n * sizeof(*S1));
 
  return res;
}

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

В данном коде представлена функция с именем 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
Похожие ответы