我试图在数组的帮助下减去两个大的正整数。但是当运行下面的代码时,我在g ++(Ubuntu)上运行时会遇到分段错误(核心转储)。
我关注了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;
答案 0 :(得分:1)
在使用y
取消引用其元素之前,永远不会为operator[]
向量分配任何空格。特别是:
y[k] = N[i] - a[j];
非常确定你想要push_back()
,或者预先分配空间。无论哪种方式,甚至取消引用零大小矢量的零索引也不是很好。
答案 1 :(得分:0)
为向量y
vector<int> y(n,0); //n = max of N.size() & a.size()
else {
y[k] = N[i];
i++; // Should be i--
k++;
}
答案 2 :(得分:-1)
您是否已加入vector
?
另外,请给我们编译输出。