欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用系数变换法:实现多项式的相除

程序员文章站 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;
}

算法的主要原理并不是很难,主要用到的是系数变换法,详细的实现原理看这里

下面是几个例子:
使用系数变换法:实现多项式的相除
使用系数变换法:实现多项式的相除

相关标签: 矩阵