Add files via upload
This commit is contained in:
parent
180384307f
commit
b6a9a7577f
91
chessboard.cpp
Normal file
91
chessboard.cpp
Normal file
|
@ -0,0 +1,91 @@
|
|||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <stdexcept>
|
||||
using namespace std;
|
||||
|
||||
class ChessBoardArray {
|
||||
protected:
|
||||
class Row {
|
||||
public:
|
||||
Row(ChessBoardArray &a, int i):chessBoardArray(a), row(i) {}
|
||||
int & operator [] (int i) const{
|
||||
return chessBoardArray.select(row, i);
|
||||
}
|
||||
|
||||
private:
|
||||
ChessBoardArray &chessBoardArray;
|
||||
int row;
|
||||
};
|
||||
class ConstRow {
|
||||
public:
|
||||
ConstRow(const ChessBoardArray &a, int i) : chessBoardArray(a), row(i) {};
|
||||
int operator [] (int i) const {
|
||||
return chessBoardArray.select(row, i);
|
||||
}
|
||||
|
||||
private:
|
||||
const ChessBoardArray &chessBoardArray;
|
||||
int row;
|
||||
};
|
||||
|
||||
public:
|
||||
ChessBoardArray(unsigned size=0, unsigned base=0) : data(new int[(size*size+1)/2]), thebase(base), thesize(size) {}
|
||||
|
||||
ChessBoardArray(const ChessBoardArray &a) : data(new int[(a.thesize*a.thesize+1)/2]), thebase(a.thebase), thesize(a.thesize) {
|
||||
for(unsigned i=0; i<((thesize*thesize+1)/2); ++i) data[i]=a.data[i];
|
||||
}
|
||||
|
||||
~ChessBoardArray() {delete [] data;}
|
||||
|
||||
ChessBoardArray & operator = (const ChessBoardArray &a) {
|
||||
delete [] data;
|
||||
thebase=a.thebase;
|
||||
thesize=a.thesize;
|
||||
data=new int[(thesize*thesize+1)/2];
|
||||
for(unsigned i=0; i<((thesize*thesize+1)/2); ++i) data[i]=a.data[i];
|
||||
return *this;
|
||||
}
|
||||
|
||||
int & select(int i, int j) {
|
||||
return data[loc(i,j)];
|
||||
}
|
||||
int select(int i, int j) const {
|
||||
return data[loc(i,j)];
|
||||
}
|
||||
|
||||
const Row operator [] (int i) {
|
||||
return Row(*this, i);
|
||||
}
|
||||
const ConstRow operator [] (int i) const {
|
||||
return ConstRow(*this, i);
|
||||
}
|
||||
|
||||
friend ostream & operator << (ostream &out, const ChessBoardArray &a) {
|
||||
for(int line=0; line<a.thesize; ++line) {
|
||||
for(int sthlh=0; sthlh<a.thesize; ++sthlh) {
|
||||
cout<<setw(4);
|
||||
if((line+sthlh)%2==0)
|
||||
cout<<a.select(line+a.thebase,sthlh+a.thebase);
|
||||
else cout<<0;
|
||||
}
|
||||
cout<<endl;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
protected:
|
||||
int *data;
|
||||
int thebase;
|
||||
unsigned thesize;
|
||||
|
||||
unsigned int loc(int i, int j) const throw(out_of_range) {
|
||||
int di=i-thebase, dj=j-thebase;
|
||||
if(di<0 || di>=thesize || dj<0 || dj>=thesize || (i+j)%2==1) throw out_of_range("invalid index");
|
||||
return (di*thesize +dj)/2;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
66
cycle.cpp
Normal file
66
cycle.cpp
Normal file
|
@ -0,0 +1,66 @@
|
|||
#include <iostream>
|
||||
#include <list>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
using namespace std;
|
||||
|
||||
class Graph{
|
||||
private:
|
||||
int numofvertices;
|
||||
list<int> *ptr;
|
||||
vector<int> color;
|
||||
vector<int> root;
|
||||
int startofcircle, endofcircle;
|
||||
|
||||
bool DFS(int v) {
|
||||
color[v]=1;
|
||||
for(int u: ptr[v]){
|
||||
if(color[u]==0) {
|
||||
root[u]=v;
|
||||
if(DFS(u))
|
||||
return true;
|
||||
}
|
||||
else if(color[u]==1) {
|
||||
endofcircle=v;
|
||||
startofcircle=u;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
color[v]=2;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public:
|
||||
|
||||
Graph(int V): numofvertices(V) { ptr=new list<int>[numofvertices]; }
|
||||
|
||||
~Graph() { delete [] ptr;}
|
||||
|
||||
void addEdge (int u, int v) {
|
||||
ptr[u].push_back(v);
|
||||
}
|
||||
|
||||
bool cycle(vector<int> &cycle) {
|
||||
color.assign(numofvertices, 0);
|
||||
root.assign(numofvertices, -1);
|
||||
startofcircle=-1;
|
||||
|
||||
for(int v=0; v<numofvertices; v++) {
|
||||
if(color[v]==0 && DFS(v))
|
||||
break;
|
||||
}
|
||||
|
||||
if(startofcircle==-1)
|
||||
return false;
|
||||
else {
|
||||
cycle.push_back(startofcircle);
|
||||
for( int v=endofcircle; v!=startofcircle; v=root[v])
|
||||
cycle.push_back(v);
|
||||
|
||||
reverse(cycle.begin(), cycle.end());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
71
euler.cpp
Normal file
71
euler.cpp
Normal file
|
@ -0,0 +1,71 @@
|
|||
#include <iostream>
|
||||
#include <string>
|
||||
#include <array>
|
||||
using namespace std;
|
||||
|
||||
|
||||
int main() {
|
||||
|
||||
|
||||
int N;
|
||||
int M;
|
||||
int u, v;
|
||||
int per=0;
|
||||
int pathpart[4];
|
||||
|
||||
cin>>N;
|
||||
cin>>M;
|
||||
|
||||
int nodevalue[N];
|
||||
|
||||
for (int i=0; i<N; i++) {
|
||||
nodevalue[i]=0;
|
||||
}
|
||||
|
||||
for(int i=0; i<M; i++) {
|
||||
cin>>u;
|
||||
cin>>v;
|
||||
nodevalue[u]++;
|
||||
nodevalue[v]++;
|
||||
}
|
||||
for (int j=0; j<N; j++) {
|
||||
if (nodevalue[j]%2!=0) {
|
||||
pathpart[per]=j;
|
||||
per++;
|
||||
if (per>2){
|
||||
cout<<"IMPOSSIBLE";
|
||||
cout<<endl;
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (per==0) {
|
||||
cout<< "CYCLE";
|
||||
cout<<endl;
|
||||
}
|
||||
|
||||
else if (per==2) {
|
||||
cout<< "PATH ";
|
||||
|
||||
if (pathpart[0]<pathpart[1]) {
|
||||
cout<<pathpart[0];
|
||||
cout<<" ";
|
||||
cout<<pathpart[1];
|
||||
cout<<endl;
|
||||
}
|
||||
|
||||
else {
|
||||
cout<<pathpart[1];
|
||||
cout<<" ";
|
||||
cout<<pathpart[0];
|
||||
cout<<endl;
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
cout<<"IMPOSSIBLE";
|
||||
cout<<endl;
|
||||
}
|
||||
}
|
||||
|
87
fullratio.cpp
Normal file
87
fullratio.cpp
Normal file
|
@ -0,0 +1,87 @@
|
|||
#include <iostream>
|
||||
#ifndef CONTEST
|
||||
#include "fullratio.hpp"
|
||||
#endif
|
||||
using namespace std;
|
||||
|
||||
std::ostream& operator << (std::ostream &out, const rational &x) {
|
||||
out<<x.nom<<"/"<<x.den;
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
int rational::gcd(int a, int b) {
|
||||
if(a<0) a=(-1)*a;
|
||||
if(b<0) b=(-1)*b;
|
||||
|
||||
while(a>0 && b>0) {
|
||||
if(a>b) a=a%b;
|
||||
else b=b%a;
|
||||
}
|
||||
return a+b;
|
||||
}
|
||||
|
||||
rational::rational (int n, int d) {
|
||||
int mkd=gcd(n, d);
|
||||
nom=n/mkd;
|
||||
den=d/mkd;
|
||||
if(den<0){
|
||||
nom=(-1*nom);
|
||||
den=(-1*den);
|
||||
}
|
||||
}
|
||||
|
||||
rational operator + (const rational &x, const rational &y) {
|
||||
int arithm=((x.nom)*(y.den))+((y.nom)*(x.den));
|
||||
int parono=((x.den)*(y.den));
|
||||
|
||||
int a=arithm;
|
||||
int b=parono;
|
||||
if(a<0) a=(-1)*a;
|
||||
if(b<0) b=(-1)*b;
|
||||
|
||||
int c=rational::gcd(a,b);
|
||||
return ( rational(arithm/c, parono/c) );
|
||||
}
|
||||
|
||||
|
||||
rational operator - (const rational &x, const rational &y) {
|
||||
int arithm=((x.nom)*(y.den))-((y.nom)*(x.den));
|
||||
int parono=((x.den)*(y.den));
|
||||
|
||||
int a=arithm;
|
||||
int b=parono;
|
||||
if(a<0) a=(-1)*a;
|
||||
if(b<0) b=(-1)*b;
|
||||
|
||||
int c=rational::gcd(a,b);
|
||||
|
||||
return ( rational(arithm/c, parono/c) );
|
||||
}
|
||||
|
||||
rational operator * (const rational &x, const rational &y) {
|
||||
int arithm=((x.nom)*(y.nom));
|
||||
int parono=((x.den)*(y.den));
|
||||
int a=arithm;
|
||||
int b=parono;
|
||||
if(a<0) a=(-1)*a;
|
||||
if(b<0) b=(-1)*b;
|
||||
|
||||
int c=rational::gcd(a,b);
|
||||
|
||||
return ( rational(arithm/c, parono/c) );
|
||||
}
|
||||
|
||||
rational operator / (const rational &x, const rational &y) {
|
||||
int arithm=((x.nom)*(y.den));
|
||||
int parono=((x.den)*(y.nom));
|
||||
int a=arithm;
|
||||
int b=parono;
|
||||
if(a<0) a=(-1)*a;
|
||||
if(b<0) b=(-1)*b;
|
||||
|
||||
int c=rational::gcd(a,b);
|
||||
|
||||
return ( rational(arithm/c, parono/c) );
|
||||
}
|
||||
|
212
lexicon.cpp
Normal file
212
lexicon.cpp
Normal file
|
@ -0,0 +1,212 @@
|
|||
|
||||
|
||||
class lexicon
|
||||
{
|
||||
private:
|
||||
class Node
|
||||
{
|
||||
public:
|
||||
std::string key;
|
||||
Node* left=nullptr;
|
||||
Node* right=nullptr;
|
||||
int freq=1;
|
||||
};
|
||||
|
||||
Node* root;
|
||||
public:
|
||||
|
||||
lexicon():root(nullptr){}
|
||||
|
||||
~lexicon(){purge(root);}
|
||||
|
||||
void purge(Node* root)
|
||||
{
|
||||
if(root==nullptr)
|
||||
return;
|
||||
purge(root->left);
|
||||
purge(root->right);
|
||||
delete root;
|
||||
}
|
||||
Node* createNode(const std::string &s)
|
||||
{
|
||||
Node* newNode = new Node();
|
||||
newNode->key=s;
|
||||
newNode->left=newNode->right=nullptr;
|
||||
newNode->freq = 1;
|
||||
return newNode;
|
||||
}
|
||||
|
||||
void insert(const std::string &s)
|
||||
{
|
||||
if(root==nullptr)
|
||||
{
|
||||
root=createNode(s);
|
||||
}else if(insert(root,s)){}
|
||||
}
|
||||
bool insert(Node* t, const std::string &s)
|
||||
{
|
||||
if(s<t->key)
|
||||
{
|
||||
if(t->left==nullptr)
|
||||
{
|
||||
t->left=createNode(s);
|
||||
return true;
|
||||
}else
|
||||
return insert(t->left,s);
|
||||
}else if(s>t->key)
|
||||
{
|
||||
if(t->right==nullptr)
|
||||
{
|
||||
t->right=createNode(s);
|
||||
return true;
|
||||
}else
|
||||
return insert(t->right,s);
|
||||
}else
|
||||
{
|
||||
++(t->freq);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
int lookup(const std::string &s) const
|
||||
{
|
||||
return lookup(root,s);
|
||||
}
|
||||
Node* minVal(Node* root)
|
||||
{
|
||||
Node* temp = root;
|
||||
while(temp->left!=nullptr)
|
||||
temp= temp->left;
|
||||
return temp;
|
||||
}
|
||||
void remove(const std::string & s)
|
||||
{
|
||||
root=remove(root,s);
|
||||
}
|
||||
Node* remove(Node* root, const std::string &s)
|
||||
{
|
||||
if(root==nullptr)
|
||||
return root;
|
||||
if(s<root->key)
|
||||
root->left=remove(root->left,s);
|
||||
else if(s>root->key)
|
||||
root->right=remove(root->right,s);
|
||||
else
|
||||
{
|
||||
if(root->left==nullptr)
|
||||
{
|
||||
Node* temp= root->right;
|
||||
delete root;
|
||||
return temp;
|
||||
}
|
||||
if(root->right==nullptr)
|
||||
{
|
||||
Node* temp = root->left;
|
||||
delete root;
|
||||
return temp;
|
||||
}
|
||||
Node* temp = minVal(root->left);
|
||||
root->key=temp->key;
|
||||
root->freq=temp->freq;
|
||||
root->left=remove(root->left,temp->key);
|
||||
}
|
||||
return root;
|
||||
}
|
||||
|
||||
int lookup(Node* root, const std::string& s) const
|
||||
{
|
||||
|
||||
if(root==nullptr)
|
||||
return 0;
|
||||
if(s==root->key)
|
||||
return root->freq;
|
||||
else if(s<root->key)
|
||||
return lookup(root->left,s);
|
||||
else if(s>root->key)
|
||||
return lookup(root->right,s);
|
||||
}
|
||||
|
||||
void Inorder()const
|
||||
{
|
||||
Inorder(root);
|
||||
}
|
||||
void Inorder(Node* root)const
|
||||
{
|
||||
if(root==nullptr)
|
||||
return;
|
||||
Inorder(root->left);
|
||||
cout<<root->key<<" "<<root->freq<<endl;
|
||||
Inorder(root->right);
|
||||
}
|
||||
|
||||
void replace(const string &s1, const string &s2)
|
||||
{
|
||||
|
||||
if(lookup(s1)==0)
|
||||
return;
|
||||
else
|
||||
{
|
||||
int s1_freq=0;
|
||||
Node*node_1=search_string(s1);
|
||||
s1_freq=node_1->freq;
|
||||
remove(s1);
|
||||
if(lookup(s2)==0)
|
||||
{
|
||||
insert(s2);
|
||||
|
||||
search_string(s2)->freq=s1_freq;
|
||||
}else
|
||||
search_string(s2)->freq+=s1_freq;
|
||||
}
|
||||
|
||||
}
|
||||
friend ostream& operator<<(ostream& stream, const lexicon& l)
|
||||
{
|
||||
l.Inorder(l.root);
|
||||
stream<<"";
|
||||
return stream;
|
||||
}
|
||||
Node* search_string(const std::string &s)
|
||||
{
|
||||
return search_string(root,s);
|
||||
}
|
||||
Node* search_string(Node* root,const std::string &s)
|
||||
{
|
||||
if(root==nullptr || s==root->key)
|
||||
return root;
|
||||
else if(s<root->key)
|
||||
return search_string(root->left,s);
|
||||
else if(s>root->key)
|
||||
return search_string(root->right,s);
|
||||
}
|
||||
int getLevelUtil(Node* root ,const string& data, int level) const
|
||||
{
|
||||
if (root == nullptr)
|
||||
return 0;
|
||||
if (root -> key == data)
|
||||
return level;
|
||||
int downlevel = getLevelUtil(root -> left,
|
||||
data, level + 1);
|
||||
if (downlevel != 0)
|
||||
return downlevel;
|
||||
downlevel = getLevelUtil(root->right,
|
||||
data, level + 1);
|
||||
return downlevel;
|
||||
}
|
||||
int depth( const string &s) const
|
||||
{
|
||||
return getLevelUtil(root, s, 1);
|
||||
}
|
||||
void print()
|
||||
{
|
||||
cout<<root->key<<endl;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
#include <list>
|
||||
#include <array>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
using namespace std;
|
254
polynomial.cpp
Normal file
254
polynomial.cpp
Normal file
|
@ -0,0 +1,254 @@
|
|||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
class Polynomial {
|
||||
public:
|
||||
class Term {
|
||||
public:
|
||||
int exponent;
|
||||
int coefficient;
|
||||
Term *next;
|
||||
protected:
|
||||
Term(int exp, int coeff, Term *n) : exponent(exp), coefficient(coeff), next(n){};
|
||||
friend class Polynomial;
|
||||
};
|
||||
|
||||
Term *head;
|
||||
int degree;
|
||||
int size;
|
||||
|
||||
Polynomial():head(nullptr), degree(0), size(0) {}
|
||||
Polynomial(const Polynomial &p): head(nullptr), degree(0), size(0) {copy(p);};
|
||||
~Polynomial() {purge();}
|
||||
|
||||
Polynomial & operator =(const Polynomial &p) {clear(); copy(p); return *this;}
|
||||
|
||||
void purge() {
|
||||
Term *l=head;
|
||||
degree=0;
|
||||
size=0;
|
||||
while(l!=nullptr) {
|
||||
Term *q=l;
|
||||
l=l->next;
|
||||
delete q;
|
||||
}
|
||||
}
|
||||
|
||||
void clear() {
|
||||
purge();
|
||||
head=nullptr;
|
||||
degree=0;
|
||||
size=0;
|
||||
}
|
||||
|
||||
void remove(int exp) /* AFAIREI STOIXEIO*/ {
|
||||
Term* temp=head;
|
||||
Term* prev;
|
||||
if(head==nullptr) return;
|
||||
else {
|
||||
if(head->exponent==exp) {
|
||||
head=head->next;
|
||||
delete temp;
|
||||
}
|
||||
else {
|
||||
for(temp = head;temp->next!=nullptr && temp->exponent !=exp;temp = temp->next) {
|
||||
prev=temp;
|
||||
}
|
||||
if(temp->exponent==exp) {
|
||||
prev->next = temp->next;
|
||||
delete temp;
|
||||
}
|
||||
else return;
|
||||
}
|
||||
--size;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void addTerm(int expon, int coeff) {
|
||||
if(coeff==0 || expon<0) return;
|
||||
Term *newTerm = new Term(expon,coeff,nullptr);
|
||||
Term *temp = head;
|
||||
if(expon>degree) degree=expon;
|
||||
if(head==nullptr) {
|
||||
newTerm->next=nullptr;
|
||||
head=newTerm;
|
||||
++size;
|
||||
return;
|
||||
}
|
||||
if(expon>head->exponent) {
|
||||
newTerm->next=head;
|
||||
head=newTerm;
|
||||
++size;
|
||||
return;
|
||||
}
|
||||
if(expon==head->exponent) /* HERE */ {
|
||||
head->coefficient=head->coefficient+newTerm->coefficient;
|
||||
if(head->coefficient==0) remove(head->exponent);
|
||||
return;
|
||||
}
|
||||
while(temp->next!=nullptr) {
|
||||
if(expon==temp->exponent) /*here*/ {
|
||||
temp->coefficient=temp->coefficient+newTerm->coefficient;
|
||||
if(temp->coefficient==0)
|
||||
remove(temp->exponent);
|
||||
return;
|
||||
}
|
||||
if(expon>temp->next->exponent) {
|
||||
newTerm->next = temp->next;
|
||||
temp->next = newTerm;
|
||||
return;
|
||||
}
|
||||
temp = temp->next;
|
||||
}
|
||||
if(newTerm->exponent==temp->exponent) /*HERE*/ {
|
||||
temp->coefficient=temp->coefficient + newTerm->coefficient;
|
||||
if(temp->coefficient==0) remove(temp->exponent);
|
||||
return;
|
||||
}
|
||||
else {
|
||||
newTerm->next=nullptr;
|
||||
temp->next=newTerm;
|
||||
//temp->coefficient=temp->coefficient+newTerm->coefficient;
|
||||
++size;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
double evaluate(double x) {
|
||||
double sum=0;
|
||||
int exp;
|
||||
for(Term *l=head; l!=nullptr; l=l->next) {
|
||||
exp=l->exponent;
|
||||
double expvalue=1;
|
||||
if (exp==0) expvalue=1;
|
||||
else {
|
||||
for(int i=0; i<exp; ++i) {
|
||||
expvalue*=x;
|
||||
}
|
||||
}
|
||||
sum+=(l->coefficient)*expvalue;
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
friend Polynomial operator+ (const Polynomial &p, const Polynomial &q) {
|
||||
Polynomial r;
|
||||
Polynomial::Term *temp_p = p.head;
|
||||
Polynomial::Term *temp_q = q.head;
|
||||
while(!(temp_p==nullptr && temp_q ==nullptr)) {
|
||||
if(temp_p==nullptr && temp_q!=nullptr) {
|
||||
r.addTerm(temp_q->exponent,temp_q->coefficient);
|
||||
temp_q=temp_q->next;
|
||||
continue;
|
||||
}
|
||||
if(temp_q==nullptr && temp_p!=nullptr) {
|
||||
r.addTerm(temp_p->exponent,temp_p->coefficient);
|
||||
temp_p=temp_p->next;
|
||||
continue;
|
||||
}
|
||||
if(temp_p->exponent == temp_q->exponent) {
|
||||
r.addTerm(temp_p->exponent,temp_p->coefficient + temp_q ->coefficient);
|
||||
temp_p=temp_p->next;
|
||||
temp_q=temp_q->next;
|
||||
}
|
||||
else if(temp_p->exponent > temp_q ->exponent ) {
|
||||
r.addTerm(temp_p->exponent, temp_p->coefficient);
|
||||
temp_p=temp_p->next;
|
||||
}
|
||||
else if(temp_p->exponent < temp_q->exponent) {
|
||||
r.addTerm(temp_q->exponent,temp_q->coefficient);
|
||||
temp_q = temp_q->next;
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
friend Polynomial operator* (const Polynomial &p, const Polynomial &q) {
|
||||
Polynomial r[p.size+q.size+30];
|
||||
Polynomial product;
|
||||
int counter=0;
|
||||
for(Polynomial :: Term *i = p.head; i!=nullptr; i = i->next) {
|
||||
for(Polynomial :: Term * j= q.head; j!=nullptr; j = j->next) {
|
||||
r[counter].addTerm(i->exponent+j->exponent, (i->coefficient)*(j->coefficient));
|
||||
}
|
||||
//cout<<r[counter];
|
||||
++counter;
|
||||
}
|
||||
product = r[0];
|
||||
for(int i=1;i<counter;i++) {
|
||||
product = product + r[i];
|
||||
}
|
||||
return product;
|
||||
}
|
||||
|
||||
friend ostream & operator << (ostream &out, const Polynomial &p) {
|
||||
if(p.head==nullptr) {
|
||||
out<<"0";
|
||||
return out;
|
||||
}
|
||||
for(Polynomial::Term *i = p.head;i!=nullptr;i=i->next) {
|
||||
if(i==p.head) {
|
||||
if(i->exponent==0) {
|
||||
if(i->coefficient < 0) out<<"- "<<-(i->coefficient);
|
||||
else if(i->coefficient > 0) out<<i->coefficient;
|
||||
}
|
||||
else if(i->exponent==1) {
|
||||
if(i->coefficient < 0) {
|
||||
if(i->coefficient==-1) out<<"- "<<"x";
|
||||
else out<<"- "<<-(i->coefficient)<<"x";
|
||||
}
|
||||
else if(i->coefficient > 0) {
|
||||
if(i->coefficient==1) out<<"x";
|
||||
else out<<i->coefficient<<"x";
|
||||
}
|
||||
}
|
||||
else if(i->exponent > 1) {
|
||||
if(i->coefficient < 0) {
|
||||
if(i->coefficient==-1) out<<"- "<<"x^"<<i->exponent;
|
||||
else out<<"- "<<-(i->coefficient)<<"x^"<<i->exponent;
|
||||
}
|
||||
else if(i->coefficient > 0) {
|
||||
if(i->coefficient==1) out<<"x^"<<i->exponent;
|
||||
else out<<i->coefficient<<"x^"<<i->exponent;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(i->exponent==0) {
|
||||
if(i->coefficient < 0) out<<" - "<<-(i->coefficient);
|
||||
else if(i->coefficient > 0) out<<" + "<<i->coefficient;
|
||||
}
|
||||
else if(i->exponent==1) {
|
||||
if(i->coefficient < 0) {
|
||||
if(i->coefficient==-1) out<<" - "<<"x";
|
||||
else out<<" - "<<-(i->coefficient)<<"x";
|
||||
}
|
||||
else if(i->coefficient > 0) {
|
||||
if(i->coefficient==1) out<<" + "<<"x";
|
||||
else out<<" + "<<i->coefficient<<"x";
|
||||
}
|
||||
}
|
||||
else if(i->exponent > 1) {
|
||||
if(i->coefficient < 0) {
|
||||
if(i->coefficient==-1) out<<" - "<<"x^"<<i->exponent;
|
||||
else out<<" - "<<-(i->coefficient)<<"x^"<<i->exponent;
|
||||
}
|
||||
else if(i->coefficient > 0) {
|
||||
if(i->coefficient==1) out<<" + "<<"x^"<<i->exponent;
|
||||
else out<<" + "<<i->coefficient<<"x^"<<i->exponent;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//out<<"\n";
|
||||
return out;
|
||||
}
|
||||
|
||||
private:
|
||||
void copy(const Polynomial &p) {
|
||||
for(Term *l=p.head; l!=nullptr; l=l->next) addTerm(l->exponent, l->coefficient);
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in a new issue