从动态数组中删除滞后零

时间:2013-11-01 04:34:54

标签: c++ pointers

尝试使用另一个将删除滞后零的for循环继续此功能。即如果poly a   是1 1 1,poly b是0 -1 -1,答案是100,但应该是1,如何删除零?

2 个答案:

答案 0 :(得分:1)

如果必须使用动态数组,而不是stl向量或数组:

//first get the index of the last trailing 0
int j;
for (j=max-1; j>0 && sum[j] == 0; --j);

//next allocate memory for new array that will not have any trailing 0s
int* tmp = sum;

sum = new int[j+1];

//now copy old values into new array
for(size_t k=0;k<=j;++k){
   sum[k] = tmp[k];
}

delete[] tmp;

可以使用较短的memcpy命令替换循环以复制值:

memcpy(sum,tmp,sizeof(int)*(j+1));

上面的代码将产生一个至少为1的值的数组,所以如果你有全0,那么它只是0.否则它会将你的数组缩小到合适的大小。我确实假设您在数组的前面存储了较大的值,在最后存储了最低有效数字。

答案 1 :(得分:0)

你应该向后遍历你的列表。

for( int i=max-1; i>=0; i--) {
    //calculate sum
    if (sum[i] == 0 && i == max-1 && max > 0) { max--;}
}
p->deg=max;
p->coeffs=sum;