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