多项式相加(C++) (用数组)

#include<iostream>
#include<iomanip>
using namespace std;
class Poly{
public:
Poly();
void creat1(int n);
void print1(int n);
void creat2(int n);
void print2(int n);
void add(int n1,int n2);
private:
float coef;//系数
int exp;//指数
};
Poly::Poly(){
coef=1;
exp=1;
}
Poly dxs[10],dxs1[10],dxs2[20];
int main(){
Poly xj;
int n1,n2;//两个多项式的最高次
cout << "输入第一个多项式的项数:";
cin >> n1;
xj.creat1(n1);//调用
xj.print1(n1);//打印

cout << "输入第二个多项式的项数:";
cin >> n2;
xj.creat2(n2);
xj.print2(n2);

cout << "相加之后的结果是:"<<endl;
xj.add(n1,n2);
return 0;
}
void Poly::creat1(int n){//创建一个多项式
cout << "按降次幂输入!"<<endl;
for(int i=0;i<n;i++){
cout << "输入第"<<i+1<<"项的系数:";
cin >> dxs1[i].coef;
cout << "输入第"<<i+1<<"项的指数:";
cin >> dxs1[i].exp;
}
}
void Poly::print1(int n){
for(int i=0;i<n;i++){
if(dxs1[i].coef!=0) {
if(i<n-1&&dxs1[i+1].coef>=0.00) cout << fixed << setprecision(2)<< dxs1[i].coef << "*x^"<<dxs1[i].exp << "+" ;
else cout << fixed << setprecision(2)<< dxs1[i].coef << "*x^"<<dxs1[i].exp;
}
}
cout << endl;
}
void Poly::creat2(int n){//创建一个多项式
cout << "按降次幂输入!"<<endl;
for(int i=0;i<n;i++){
cout << "输入第"<<i+1<<"项的系数:";
cin >> dxs2[i].coef;
cout << "输入第"<<i+1<<"项的指数:";
cin >> dxs2[i].exp;
}
}
void Poly::print2(int n){
for(int i=0;i<n;i++){
if(dxs2[i].coef!=0){
if(i<n-1&&dxs2[i+1].coef>=0.00) cout << fixed << setprecision(2)<< dxs2[i].coef << "*x^"<<dxs2[i].exp << "+" ;
else cout <<fixed << setprecision(2)<< dxs2[i].coef << "*x^"<<dxs2[i].exp;

}
}
cout << endl;
}
void Poly::add(int n1,int n2){
int i=0,j=0,p=0;//用i表示dxs1的循环,用j表示dxs2的循环,用p表示dxs的循环
while(i<n1&&j<n2){
if(dxs1[i].exp == dxs2[j].exp){
dxs[p].coef = dxs1[i].coef + dxs2[j].coef;
dxs[p].exp = dxs1[i].exp;
i++;
j++;
}
else {
if(dxs1[i].exp>dxs2[j].exp){
dxs[p].coef = dxs1[i].coef;
dxs[p].exp = dxs1[i].exp;
i++;
}
else {
dxs[p].coef = dxs2[j].coef;
dxs[p].exp = dxs2[j].exp;
j++;
}
}
p++;
}
while (i<n1){
dxs[p].coef = dxs1[i].coef;
dxs[p].exp = dxs1[i].exp;
i++;p++;
}
while (j<n2){
dxs[p].coef = dxs2[j].coef;
dxs[p].exp = dxs2[j].exp;
j++;p++;
}
/*或for(p=0;;p++){
if(dxs1[i].exp = dxs2[j].exp){
dxs[p].coef = dxs1[i].coef + dxs2[j].coef;
dxs[p].exp = dxs1[i].exp;
i++;
j++;
}
else {
if(dxs1[i].exp>dxs2[j].exp){
dxs[p].coef = dxs1[i].coef;
dxs[p].exp = dxs1[i].exp;
i++;
}
else {
dxs[p].coef = dxs2[j].coef;
dxs[p].exp = dxs2[j].exp;
j++;
}
}
if(i==n1||j==n2){
p++;
break;
}
if(i==n1){
for(;j<n2;j++){
dxs[p].coef = dxs2[j].coef;
dxs[p].exp = dxs2[j].exp;
p++;
}
}
else{
for(;i<n1;i++){
dxs[p].coef = dxs1[i].coef;
dxs[p].exp = dxs1[i].exp;
p++;
}
}
}*/

/* 或for(p=0;;p++){
if(dxs1[i].exp==dxs2[j].exp)
{
dxs[p].coef=dxs1[i].coef+dxs2[j].coef;
dxs[p].exp=dxs1[i].exp;
i++;
j++;
}
else
{
if(dxs1[i].exp>dxs2[j].exp)
{
dxs[p].coef=dxs1[i].coef;
dxs[p].exp=dxs1[i].exp;
i++;
}
else
{
dxs[p].coef=dxs2[j].coef;
dxs[p].exp=dxs2[j].exp;
j++;
}
}
if(i==n1||j==n2)
{
p++;
break;
}
}
if(j==n2)
for(;i<n1;i++)
{
dxs[p].coef=dxs1[i].coef;
dxs[p].exp=dxs1[i].exp;
p++;
}
else if(j<=n2){
for(;j<n2;j++)
{
dxs[p].coef=dxs2[j].coef;
dxs[p].exp=dxs2[j].exp;
p++;
}
}*/
for(int m=0;m<p;m++){
if(dxs[m].coef!=0){
if(m<p-1&&dxs[m+1].coef>=0.00) cout << fixed << setprecision(2)<< dxs[m].coef << "*x^"<<dxs[m].exp << "+" ;
else cout <<fixed << setprecision(2)<< dxs[m].coef << "*x^"<<dxs[m].exp;
}
}
}

/*有一个错误
4.00*x^4 - 3.00*x^3 + 0.00*x^2 + 1.00x^1;
5.00*x^5 + 0.00*x^4 + 3.00*x^3 - 2.00*x^2 + 1.00x^1;
会输出:5.00*x^5 + 4.00*x^4 +- 2.00*x^2 + 2.00*x^1;*/
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值