2013-08-16 2 views
1

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

Я следовал за Subtract numbers using arrays - C++ и Subtracting two long positive integers in an array 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

Какая строка является ошибкой? Скорее всего, вы переписываете память. – OldProgrammer

+0

С его помощью эта ошибка после ввода обоих цифр и нажатия ввода. – user1504383

+0

Вы пропустили код с помощью отладчика? HOw вы знаете, какая строка вызывает ошибку? – OldProgrammer

ответ

1

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

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

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

+0

Просто увидел это. Хороший улов! – OldProgrammer

+0

Да, это сработало! Также была небольшая ошибка в инструкции else, она должна быть i-- вместо i ++. – user1504383

0

Выделяют пространство для вектора y

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

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

} 
-1

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

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

Смежные вопросы