Вопрос об интервью - реализует Biginteger, Умножаются

Реализация Biginteger умножается

  1. используйте целочисленный массив для хранения biginteger как 297897654, будет сохранен как {2,9,7,8,9,7,6,5,4}
  2. реализуйте умножить функцию для bigintegers
    Expamples: {2, 9, 8, 8, 9, 8} * {3,6,3,4,5,8,9,1,2} = {1,0,8,6,3,7,1,4,1,8,7,8,9,7,6}

Я не удался реализовать этот класс и думал это в течение нескольких недель, не мог получить ответ.

Кто-либо может помочь мне реализовать его с помощью C#/Java?Большое спасибо.

6
задан Robert Groves 9 July 2010 в 04:27
поделиться

3 ответа

Вы знаете, как делать умножение на бумаге?

  123
x 456
-----
  738
 615
492
-----
56088

Я бы просто реализовал этот алгоритм в коде.

16
ответ дан 8 December 2019 в 03:51
поделиться

Если вы будете делать это длинным способом, вам придется реализовать метод Add(), чтобы сложить все части в конце. Я начал с этого просто для того, чтобы начать. После того, как вы реализовали Add(), метод Multipy() реализуется аналогичным образом.

public static int[] Add(int[] a, int[] b) {
   var maxLen = (a.Length > b.Length ? a.Length : b.Length);
   var carryOver = 0;
   var result = new List<int>();
   for (int i = 0; i < maxLen; i++) {
      var idx1 = a.Length - i - 1;
      var idx2 = b.Length - i - 1;
      var val1 = (idx1 < 0 ? 0 : a[idx1]);
      var val2 = (idx2 < 0 ? 0 : b[idx2]);

      var addResult = (val1 + val2) + carryOver;
      var strAddResult = String.Format("{0:00}", addResult);
      carryOver = Convert.ToInt32(strAddResult.Substring(0, 1));
      var partialAddResult = Convert.ToInt32(strAddResult.Substring(1));
      result.Insert(0, partialAddResult);
   }
   if (carryOver > 0) result.Insert(0, carryOver);
   return result.ToArray();
}
0
ответ дан 8 December 2019 в 03:51
поделиться

Реализация на C++:

Исходный код:

#include <iostream>

using namespace std;

int main()
{
    int a[10] = {8,9,8,8,9,2};
    int b[10] = {2,1,9,8,5,4,3,6,3};

    // INPUT DISPLAY
    for(int i=9;i>=0;i--) cout << a[i];
    cout << " x ";
    for(int i=9;i>=0;i--) cout << b[i];
    cout << " = ";

    int c[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

    for(int i=0;i<10;i++)
    {
            int carry = 0;
            for(int j=0;j<10;j++)
            {
                    int t = (a[j] * b[i]) + c[i+j] + carry;
                    carry = t/10;
                    c[i+j] = t%10;
            }
    }

    // RESULT DISPLAY
    for(int i=19;i>=0;i--) cout << c[i];
    cout << endl;
}

Выход:

0000298898 x 0363458912 = 00000108637141878976
5
ответ дан 8 December 2019 в 03:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: