您的位置:首页 > 大数据 > 人工智能

(多项式运算4.7.6)POJ 2527 Polynomial Remains(多项式除法)

2013-10-26 10:24 399 查看


例[编辑]

计算



把被除式、除式按某个字母作降幂排列,并把所缺的项用零补齐,写成以下这种形式:



然后商和余数可以这样计算:
将分子的第一项除以分母的最高次项(即次数最高的项,此处为x)。结果写在横线之上(x3 ÷ x = x2).



将分母乘以刚得到结果(最终商的第一项),乘积写在分子前两项之下(同类项对齐) (x2 · (x − 3) = x3 − 3x2).



从分子的相应项中减去刚得到的乘积(消去相等项,把不相等的项结合起来),结果写在下面。((x3 − 12x2) − (x3 − 3x2) = −12x2 + 3x2 = −9x2)然后,将分子的下一项“拿下来”。



把减得的差当作新的被除式,重复前三步(直到余式为零或余式的次数低于除式的次数时为止.被除式=除式×商式+余式 )



重复第四步。这次没什么可以“拿下来”了。



横线之上的多项式即为商,而剩下的 (−123) 就是余数。



算数的长除法可以看做以上算法的一个特殊情形,即所有 x 被替换为10的情形。

/*
* POJ_2527.cpp
*
*  Created on: 2013年10月26日
*      Author: Administrator
*/

#include <iostream>
#include <cstdio>

using namespace std;

const int maxn = 10010;
int main(){
int n,k;

int val[maxn];
while(scanf("%d%d",&n,&k)!=EOF,n!=-1 || k !=-1){
int i;
for(i = 0 ; i <= n ; ++i){
scanf("%d",&val[i]);
}

//进行除法运算
for(i = n ; i >= k ; --i){
if(val[i] == 0){
continue;
}

val[i-k] = val[i-k] - val[i];
val[i] = 0;
}

//调整数组长度,即高位的0不用输出
int t = n;
while(val[t] == 0 && t > 0){
--t;
}

for(i = 0 ; i < t ; ++i){
printf("%d ",val[i]);
}
printf("%d\n",val[t]);

}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: