Умножение на индивидуальное значение места в C ++ - PullRequest
0 голосов
/ 10 марта 2020

У меня есть два неотрицательных числа, представленных как массивы цифр, которые могут иметь разную длину, и я хочу умножить их, не преобразовывая в строку, используя stoll, потому что это ограничивает размер ввода.

Я могу получить его работать для таких случаев, как 900 * 9, но не 11 * 11.

Это то, что я до сих пор:

  #include <iostream>
  int main() {

    int a[100], b[100], product[200]; // required to use
    int n, m;
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
      cin >> a[i];
    }
    for (int i = 0; i < m; i++) {
      cin >> b[i];
    }

    int temp2 = 0;
    for (int i = 0; i < n; i++) {
      int temp1 = temp2*10; // i think it might be this line that doesn't always work but i don't know what I should change it to
      for (int j = 0; j < m; j++) {
        temp2 = a[i] * b[j] + temp1;
        cout << temp2 << endl;
      }
    }
  }

1 Ответ

0 голосов
/ 10 марта 2020

Я исправил ваш код в решении ниже. Решение сохраняется в массиве product, а затем перемещается в vector<int> с именем solution, где size равно точному количеству цифр в качестве окончательного ответа, и выводится на консоль после завершения программы:

#include <iostream>
#include <vector>
using namespace std;

int main() {

    int a[100], b[100], product[200]; // required to use
    for (int i = 0; i < 200; ++i) {
        product[i] = 0;
    }
    int n, m;
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    for (int i = 0; i < m; i++) {
        cin >> b[i];
    }

    int lineDigit = 0;
    for (int i = n - 1; i >= 0; i--) {
        int lineSum = 0;
        for (int j = m - 1; j >= 0; j--) {
            int digit = (m - j) + 1;

            int digitProd = a[i] * b[j];
            int tens = digitProd / 10;
            int ones = digitProd % 10;
            product[digit + lineDigit] += ones;
            product[digit + lineDigit + 1] += tens;

            product[digit + lineDigit + 1] += product[digit + lineDigit] / 10;
            product[digit + lineDigit] %= 10;
        }

        ++lineDigit;
    }

    bool foundNonZero = false;
    vector<int> solution;
    for (int i = 199; i >= 2; --i) {
        if (!foundNonZero) {
            if (product[i] != 0) {
                foundNonZero = true;
            }
            else {
                continue;
            }
        }
        solution.push_back(product[i]);
    }

    for (int i = 0; i < solution.size(); ++i) {
        cout << solution[i] << ' ';
    }
    cout << endl;

    system("pause");
}

В вашем коде было несколько простых арифметических c ошибок. Это не очень объяснит go из-за этого; просто продолжайте думать о том, как умножение выполняется вручную, и попытайтесь получить правильную логику c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...