1

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

4

2 回答 2

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。否则它会将你的数组缩小到适当的大小。我确实假设您在数组的前面存储了较大的值,而在末尾存储了最低有效数字。

于 2013-11-01T04:43:01.907 回答
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;
于 2013-11-01T04:52:22.133 回答