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