1

我试图在数组的帮助下减去两个大的正整数。但是在运行下面的代码时,在 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;
4

3 回答 3

1

在您使用取消引用其元素之前,您的y向量永远不会分配任何空间。operator[]具体来说:

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

很确定你想要push_back()那个,或者预先分配空间。无论哪种方式,即使是零大小向量的零索引也不能解除引用。

于 2013-08-16T18:35:00.093 回答
0

为向量分配空间y

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

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

}
于 2013-08-16T18:41:02.727 回答
-1

你包括了vector吗?

另外,请给我们编译器输出。

于 2013-08-16T18:42:07.407 回答