多项式相加(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;*/

你可能感兴趣的:(C++,c,C#,J#)