Ошибка сегментации при добавлении двух больших чисел, представленных в виде строк

Вот фрагмент кода или, скорее, функция, которая принимает в качестве входных данных две строки, которые в основном представляют собой большие целые числа, и выводит их сумму. Я правильно получаю сумму, но в конце возникает ошибка сегментации, и я не могу определить ее источник.

string sum(string x, string y) {
bool carry = false;
int yLen = y.length(), xLen = x.length();
vector<char> s;
for(int i = xLen - 1, j = yLen - 1; i >= 0, j >= 0; i--, j--) {
int a = x[i] - '0', b = y[j] - '0';
int c = (carry?(a+b+1):(a+b));
if(c/10)        carry = true, c %= 10;
else            carry = false;
s.push_back(c + '0');
}
for(int i = xLen - yLen - 1; i >= 0; i--) {
int a = x[i] - '0';
int c = (carry?(a+1):(a));
if(c/10)        carry = true, c %= 10;
else            carry = false;
s.push_back(c + '0');
}
reverse(s.begin(), s.end());
for(vector<char>::iterator i = s.begin(); i != s.end(); i++)        cout<<*i;
cout<<endl;
}

Обновление: Предположим, что x.length () всегда больше или равен y.length () в самом входе.

0

Решение

Ваша функция возвращает string,

Вам нужно вернуть строку или изменить ее на void,

void sum(string x, string y) {

Не возвращение в функцию, возвращающую значение, является неопределенным поведением и, вероятно, является причиной вашей ошибки сегментации.

3

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

Этот цикл заявления

for(int i = xLen - 1, j = yLen - 1; i >= 0, j >= 0; i--, j--) {

уже неправильно.

Второе выражение в цикле

i >= 0, j >= 0

является выражением оператора запятой. Он не учитывает, что я могу быть меньше 0. Значением выражения является значение условия j> = 0. Так что, если xLen меньше, чем yLen, то вы получите, что я буду равен некоторому отрицательному числу. ,

Вы должны переписать этот цикл. Я думаю, что вы имели в виду выражение

i >= 0 && j >= 0
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector