g ++ — вычитать большие числа, используя массивы Stack Overflow

Я попытался вычесть два больших натуральных числа с помощью массивов. Но при выполнении кода ниже я получаю ошибку сегментации (дамп ядра) при запуске на g ++ (Ubuntu).

Я последовал за Вычитать числа с использованием массивов — C ++ а также Вычитание двух длинных натуральных чисел в массиве c ++ но не мог найти большую помощь от них.

int main() {
vector <int> N;
vector <int> a;
vector <int> y;
char digit1;
int l;

do {
cin.get(digit1);
if (digit1 != (int)
'\n')
N.push_back(int(digit1) - int('0'));
} while (digit1 != (int)
'\n');

char digit2;
do {
cin.get(digit2);
if (digit2 != (int)
'\n')
a.push_back(int(digit2) - int('0'));
} while (digit2 != (int)
'\n');

int i = N.size() - 1;
int j = a.size() - 1;
int k = 0;
do {
if (j >= 0) {
if (N[i] < a[j]) {
y[k] = N[i] + 10 - a[j];
l = i - 1;
while (N[l] == 0) {
N[l] = 9;
l--;
}
N[l] = N[l] - 1;
} else {
y[k] = N[i] - a[j];
}
i--;
j--;
k++;
} else {
y[k] = N[i];
i++;
k++;
}
} while (i >= 0);

for (int m = y.size() - 1; m >= 0; m--) {
cout << y[m];
}
return 0;

1

Решение

Ваш y вектор никогда не выделяется пробелом перед использованием operator[] разыменовать его элементы. Конкретно это:

y[k] = N[i] - a[j];

Уверен, что вы хотите push_back() что, или предварительно выделить пространство. В любом случае, разыменование даже нулевого индекса вектора нулевого размера не годится.

1

Другие решения

Выделить место для вектора y

vector<int> y(n,0); //n = max of N.size() & a.size()

else {
y[k] = N[i];
i++; // Should be i--
k++;

}
0

Вы включили vector?

Также, пожалуйста, дайте нам вывод компилятора.

-1
По вопросам рекламы [email protected]