使用系数变换法:实现多项式的相除
程序员文章站
2022-03-16 18:21:29
...
多项式除法之系数变换法:
之前一段时间做了一些比赛,发现用到了,多项式的除法。于是,找到在学术期刊上发现了一个,比较好的关于多项式除法的算法。于是,就直接写了一个程序(c++)。有需要的同学,可直接提取哦
#include "pch.h"
#include <iostream>
#include<fstream>
#include<vector>
using namespace std;
int main()
{
vector<int> divisor ;//定义除式
vector<int> divide ;//定义被除式
int number,value;
cout << "输入除式项数:" << endl;
cin >> number;
cout << "输入除式项的系数(存在的项输入系数,不存在就输入0):" << endl;
for (int i = 0; i < number; i++)
{
cin >> value;
divisor.push_back(value);
}
number = 0;
cout << "输入被除式项数:" << endl;
cin >> number;
cout << "输入被除式项的系数(存在的项输入系数,不存在就输入0):" << endl;
for (int i = 0; i < number; i++)
{
cin >> value;
divide.push_back(value);
}
//主体部分
int n, m;
n = divide.size() - 1;//被除数的长度
m = divisor.size() - 1;//除数的下标最大值
if (n < m)
{
cout << "被除式不能短于除式!" << endl;
return 0;
}
//系数变换法去实现多项式的除法
vector <int> k;
int temp = 0;
int t = 0;
for (int i = 0; i <= n - m; i++)
{
temp = -(divide[i] / divisor[0]);
k.push_back(temp);
t = 0;
for (int j = i; j <= i + m; j++)
{
divide[j] = divide[j] + k[i] * divisor[t];
t++;
}
}
int num = k.size();
int c = 0;
cout << "商式为:";
for (; c < num; c++)
{
if (k[c] != 0 && c != n - m)
cout << "(" << -k[c] << "X^" << n - m - c << ")" << "+";
if (c == n - m)
cout << "(" << -k[c] << ")";
}
cout << endl;
cout << "余项为:";
for (c = n - m + 1; c <= n; c++)
{
if (divide[c] != 0 && c != n)
cout << "(" << divide[c] << "X^" << n - c << ")" << "+";
if (c == n)
cout << "(" << divide[c] << ")";
}
cout << endl;
return 0;
}
算法的主要原理并不是很难,主要用到的是系数变换法,详细的实现原理看这里
下面是几个例子:
上一篇: 为什么php不能做大型系统?
推荐阅读