📄 poly.cpp
字号:
#include<iostream>
#include<fstream>
using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");
class note
{
public:
double a;
int b;
};
class fc
{
private:int n;
note *sd;
double x;
public:
fc()
{
n=0;
sd=0;
}
void input();
void output();
fc&operator = (fc&x);
fc operator + (fc&x);
fc operator - (fc&x);
fc operator *(fc&x);
fc&dev();
fc&indev();
double operator ()(double x);
};
void fc::input()
{
int x;in>>x;
n=x;
if(sd!=0)
delete[] sd;
sd=new note[n];
for(int i=0;i<n;i++)
{
in>>sd[i].a;in>>sd[i].b;
}
}
void fc::output()
{
if(n==1)
{
if(sd[0].a==0)
out<<0;
else
if(sd[0].b==1)
{
if(sd[0].a==1.0) out<<"x";
else out<<sd[0].a<<"x";
}
else
{
if(sd[0].a==1.0) out<<"x^"<<sd[0].b;
else out<<sd[0].a<<"x^"<<sd[0].b;
}
}
else
{
if(sd[0].a==0)
out<<"";
else
if(sd[0].a==1.0)
out<<"x^"<<sd[0].b;
else out<<sd[0].a<<"x^"<<sd[0].b;
for( int i=1;i<n;i++)
{
if(sd[i].a==0)
out<<"";
else
if(sd[i].a>0)
{
if(sd[i].b>0)
{
if(sd[i].b==1)
{
if(sd[i].a==1.0) out<<"+"<<"x";
else
out<<"+"<<sd[i].a<<"x";
}
else if(sd[i].a==1.0) out<<"+"<<"x^"<<sd[i].b;
else out<<"+"<<sd[i].a<<"x^"<<sd[i].b;
}
else out<<"+"<<sd[i].a;
}
else if(sd[i].a<0)
{
if(sd[i].b>0)
{
if(sd[i].b==1)
out<<sd[i].a<<"x";
else out<<sd[i].a<<"x^"<<sd[i].b;
}
else out<<sd[i].a;
}
}
}
out<<endl;
}
fc&fc::operator =(fc&x)
{
if(sd!=0) delete[] sd;
sd=new note[x.n];
for(int i=0;i<x.n;i++)
{
sd[i].a=x.sd[i].a;
sd[i].b=x.sd[i].b;
}
n=x.n;
return *this;
}
fc fc::operator +(fc&x)
{
fc temp;
int count=0;
int i=0,k=0,j=0;
for(i=0;i<n;i++)
for(j=0;j<x.n;j++)
{
if(x.sd[j].b==sd[i].b)
count++;
}
temp.n=n+x.n-count;
temp.sd=new note[temp.n];
i=0;j=0;
while(i<n&&j<x.n)
{
while(x.sd[j].b<sd[i].b)
{
temp.sd[k].a=sd[i].a;
temp.sd[k].b=sd[i].b;
k++;
i++;
}
if(x.sd[j].b==sd[i].b)
{
temp.sd[k].b=sd[i].b;
temp.sd[k].a=sd[i].a+x.sd[j].a;
k++;
i++;
j++;
}
else
{
temp.sd[k].b=x.sd[j].b;
temp.sd[k].a=x.sd[j].a;
k++;
j++;
}
}
if(j<x.n)
{
while(j<x.n)
{
temp.sd[k].b=x.sd[j].b;
temp.sd[k].a=x.sd[j].a;
k++;
j++;
}
}
else if(i<n)
{
while(i<n)
{
temp.sd[k].a=sd[i].a;
temp.sd[k].b=sd[i].b;
k++;
i++;
}
}
return temp;
}
fc fc::operator -(fc&x)
{
int i=0;
for(i=0;i<x.n;i++)
x.sd[i].a=x.sd[i].a-0.0;
fc temp;
int count=0;
int k=0,j=0;
for(i=0;i<n;i++)
for(j=0;j<x.n;j++)
{
if(x.sd[j].b==sd[i].b)
count++;
}
temp.n=n+x.n-count;
temp.sd=new note[temp.n];
i=0;j=0;
while(i<n&&j<x.n)
{
while(x.sd[j].b<sd[i].b)
{
temp.sd[k].a=-sd[i].a;
temp.sd[k].b=sd[i].b;
k++;
i++;
}
if(x.sd[j].b==sd[i].b)
{
temp.sd[k].b=sd[i].b;
temp.sd[k].a=x.sd[j].a-sd[i].a;
k++;
i++;
j++;
}
else
{
temp.sd[k].b=x.sd[j].b;
temp.sd[k].a=x.sd[j].a;
k++;
j++;
}
}
if(j<x.n)
{
while(j<x.n)
{
temp.sd[k].b=x.sd[j].b;
temp.sd[k].a=x.sd[j].a;
k++;
j++;
}
}
else if(i<n)
{
while(i<n)
{
temp.sd[k].a=sd[i].a;
temp.sd[k].b=sd[i].b;
k++;
i++;
}
}
return temp;
}
fc fc::operator *(fc&x)
{
int k=0;
fc num,a;
a.sd=new note[100];
for(int i=0;i<n;i++)
{
k=0;
for(int j=0;j<x.n;j++)
{
a.sd[k].a=sd[i].a*x.sd[j].a;
a.sd[k].b=sd[i].b+x.sd[j].b;
k++;
}
a.n=k;
num=num+a;
}
return num;
}
fc&fc::dev(){
for(int i=0;i<n;i++)
{
sd[i].a=sd[i].a*sd[i].b;
sd[i].b=sd[i].b-1;
if(sd[i].b==-1)
{
sd[i].a=0;sd[i].b=0;
}
}
return *this;
}
fc&fc::indev()
{
for(int i=0;i<n;i++)
{
sd[i].b=sd[i].b+1;
sd[i].a=sd[i].a/sd[i].b;
}
return *this;
}
double fc::operator ()(double x)
{
double num=0.0,d,he;
for(int i=0;i<n;i++)
{
d=1.0;
he=0.0;
for(int j=0;j<sd[i].b;j++)
d=d*x;
he=sd[i].a*d;
num=num+he;
}
return num;
}
int n;
double n1,n2;
int i;
char *f,e;
int main()
{
in>>n;
f=new char[n];
fc *a=new fc[n];
fc b,c,d;
for(i=0;i<n;i++)
a[i].input();
for(i=1;i<n;i++)
in>>f[i];
for(i=1;i<n;i++)
{
if(f[i]=='+')
a[i]=a[i]+a[i-1];
else if(f[i]=='-')
a[i]=a[i]-a[i-1];
else if(f[i]=='*')
a[i]=a[i]*a[i-1];
}
b=a[n-1];
d=b;
b.output();
while(in>>e)
{
if(e=='d')
{
in>>n1;
c=b.dev();
c.output();
double x=c(n1);
out<<x<<endl;
}
if(e=='i')
{
in>>n2;
c=d.indev();
c.output();
double x=c(n2);
out<<x<<endl;
}
}
delete[] a;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -