exe程序

点此下载

功能

输入多项式

  为了方便起见,将多项式表示成数对的形式。如x2+1x^2+1可表示成(1,2)(1,0),5x6−4x3+25x^6-4x^3+2可表示成 (5,6)(-4,3)(2,0)。当然,你的输入必须得合法,否则,我的程序会告诉你输入错误。不过为了让软件记住这个多项式,你可以输入p=(1,2)(1,0),q=(5,6)(4,3)(2,0)的形式,那么以后你就可以用p、q表示多项式了。当你想进行加减法运算时,只需要输⼊入p、q就可以了。

输出多项式

  输出时,我会以x5−3x3+5x^5-3x^3+5之类的样子显示结果的

保存多项式

  我的程序会询问你是否保存此多项式,如果你想保存,只需要输入多项式的名字就可以了。

多项式加减乘求导求值判等

全局可按Esc键返回主菜单

开发环境

  1. Windows 10 + Visual Studio 2017 Cummunity;

异常处理

  1. 读取输入不允许输入空格;
  2. 多项式只能输入100组以内的数对, 且必须按(float,int)输入(+1.0,+1)(-0.1,-1)(.1,1)合法, (-.1,-1)(+.1,1)(1.1.1,1)(1.0,0.1)(a,b)不合法;
  3. 多项式命名只能包含字母数字;
  4. 菜单选择异常自动重来;
  5. 文件简易检查;
  6. 多项式名称限定10位以内;
  7. 多项式名称检查, 可带空格;

设计

  1. 单例模式;
  2. 结构:

特点

  1. 多项式名称限定10位以内;
  2. 等号对齐显示储存多项式;
  3. 在操作上方显示记录, 方便操作;
  4. 为Display Record加入Delete a Polynominal子功能;
  5. 改善直接Enter空输入的情形;
  6. 修复了保存结果多项式输入名字时有空格引起不良反应的BUG;
  7. 主菜单用getch()提示错误指令对双字节键的优化, 避免一闪而过
else if (ch == 0x00 || ch == 0xE0) {cout << "\nError Dictate!";_getch();_getch();
}

随时返回主菜单

bool inputEsc(string & get) {int ch;while (1) {ch = _getch();if (ch == 0x00 || ch == 0XE0)   //if extended key_getch();   //gets scan codeelse if (ch == 27)return false;else if (ch == 8 && get.length() > 0) {cout << "\b \b";    // backspace, 光标回退一格get = get.substr(0, get.length() - 1);}else if (ch == '\r') {cout << "\n";if (get.length() == 0)continue;elsebreak;}else if(ch >= 32 && ch <= 126) {    //可打印字符cout << static_cast<char> (ch);get += ch;}}return true;
}

基本思路

  1. 采用conio.h的非缓冲输入getch()函数 (VS为_getch()), 可打印的实时打印并记录到string上, Backspace光标左移打印空格再光标左移, 模拟缓冲输入效果, Esc返回非, Enter结束输入, 其他忽略;

细节

  1. 键盘一些控制键如上下左右键的键值是双字节的, 而getch()只能读取单字节, 读取扩展字符必须进行两次调用, 第一次返回该键的扩展的字符(0xE0 或 0x00), 第二个调用返回的实际的键代码;
  2. 一开始误用char ch, ch=getch(), 这样无法判断0xE0 或 0x00, 应用int ch;
  3. 对于Backspace, 应判断string的长度是否不是0, 若不判断, 将导致界面越界回退;
  4. 对于Enter, 应判断string的长度是否是0, 若不判断, 将导致输入可能为空;

缺陷

  1. 输入时无法通过Ctrl+V粘贴数据, 但可通过快速编辑的右键粘贴;
  2. 输入时左右键失效;

心得

  1. 拷贝构造函数参数必须为 const 类型的引用
  2. sscanf 的用法
  3. getline(cin,string)要包含
  4. 文件流 peek()指针位置停留在前, eof()指针位置同步
  5. c++11for(auto x: mapName)x.first x.second 的遍历 ; 元素插入 insert(make_pair(key,value))
  6. 字符串转数字
//C风格
const char *in = input.c_str();
for (int i = 0; i < count; i++) {int exp;float coef;sscanf_s(in, "%*c%f%*c%d%*c", &coef, &exp);addTerm(exp, coef);
}
//C++风格
stringstream in(input);
for (int i = 0; i < count; i++) {int exp;float coef;char ch;in >> ch >> coef >> ch >> exp >> ch;addTerm(exp, coef);
}

源码

main.cpp

#include"Control.h"
#include<stdlib.h>
#include<conio.h>
#include<iostream>
using namespace std;
int main() {read();while (1) {system("cls");printMenu();int ch;ch = _getch();if (ch == '1')save();else if (ch == '2')operate('+');else if (ch == '3')operate('-');else if (ch == '4')operate('*');else if (ch == '5')dif();else if (ch == '6')evl();else if (ch == '7')operate('=');else if (ch == '8')dsp();else if (ch == '9')res();else if (ch == '0')break;else if (ch == 27) {cout << "\n\nMain Menu Already!";_getch();}else if (ch == 0x00 || ch == 0xE0) {cout << "\nError Dictate!";_getch();_getch();}else if (ch == 'a' || ch == 'A') {cout << "\n\n> About\n\nEmail: 870949712@qq.com\n\nCopyright 2017 Zhang Jiqi,SYSU\nAll rights reserved.";_getch();}else {cout << "\nError Dictate!";_getch();}}write();return 0;
}

Control.h

#pragma once
#include"Calculator.h"
#include<iostream>
#include<conio.h>
#include<string>
#include<stdlib.h>
using namespace std;Calculator *cal = Calculator::getInstance();
void printMenu() {system("cls");cout << "> Polynomial Calculator\n\n"<< " 1 --- Save Polynominal\n"<< " 2 ----------- Addition\n"<< " 3 -------- Subtraction\n"<< " 4 ----- Multiplication\n"<< " 5 ---- Differentiation\n"<< " 6 --------- Evaluation\n"<< " 7 ----------- Judgment\n"<< " 8 ----- Display Record\n"<< " 9 -------------- Reset\n"<< " 0 --------------- Exit\n\n"<< "Instruction:";
}
//判断浮点数输入是否合法
bool floatValid(const string Input) {string input = Input;int leftp = -1;if (input[leftp + 1] != '+'&&input[leftp + 1] != '-'&&input[leftp + 1] != '.' && (input[leftp + 1]>'9' || input[leftp + 1]<'0'))return false;if (input[leftp + 1] == '+' || input[leftp + 1] == '-' || input[leftp + 1] == '.')if (input[leftp + 2]>'9' || input[leftp + 2]<'0')return false;int point = 0;if (input[leftp + 1] == '.')point = 1;size_t i;for (i = leftp + 2; i<input.length(); i++) {if (input[i] == '.') {point++;if (point>1)return false;if (input[i + 1]>'9' || input[i + 1]<'0')return false;}else if (input[i]>'9' || input[i]<'0')return false;}return true;
}
//判断多项式输入是否合法
bool polyIsValid(const string input) {if (input[0] != '(')return false;int leftp = 0, flag = 0, count = 0;while (1) {// (~,if (input[leftp + 1] != '+'&&input[leftp + 1] != '-'&&input[leftp + 1] != '.' && (input[leftp + 1]>'9' || input[leftp + 1]<'0'))return false;if (input[leftp + 1] == '+' || input[leftp + 1] == '-' || input[leftp + 1] == '.')if (input[leftp + 2]>'9' || input[leftp + 2]<'0')return false;int point = 0;if (input[leftp + 1] == '.')point = 1;size_t i;for (i = leftp + 2; i<input.find(',', leftp + 1); i++) {if (input[i] == '.') {point++;if (point>1)return false;if (input[i + 1]>'9' || input[i + 1]<'0')return false;}else if (input[i]>'9' || input[i]<'0')return false;}// ,~)if (input[i + 1] != '+'&&input[i + 1] != '-' && (input[i + 1]>'9' || input[i + 1]<'0'))return false;if (input[i + 1] == '+' || input[i + 1] == '-')if (input[i + 2]>'9' || input[i + 2]<'0')return false;for (i = i + 2; i<input.find(')', leftp + 1); i++)if (input[i]>'9' || input[i]<'0')return false;if (i + 1 == input.length())return true;if (input[i + 1] != '(')return false;leftp = i + 1;count++;if (count > 100)return false;}
}
//判断名称输入是否合法
bool nameIsValid(const string input) {if (input.length() > 10)return false;for (size_t i = 0; i < input.length(); i++)if (!(input[i] >= 'a'&&input[i] <= 'z') && !(input[i] >= 'A'&&input[i] <= 'Z') && !(input[i] >= '0'&&input[i] <= '9'))return false;return true;
}
//判断名称是否已存在
bool nameExist(const string input) {return(cal->nameExist(input));
}
//实现随时返回输入字符串
bool inputEsc(string & get) {int ch;while (1) {ch = _getch();if (ch == 0x00 || ch == 0XE0)   //if extended key_getch();   //gets scan codeelse if (ch == 27)return false;else if (ch == 8 && get.length() > 0) {cout << "\b \b";    // backspace, 光标回退一格get = get.substr(0, get.length() - 1);}else if (ch == '\r') {cout << "\n";if (get.length() == 0)continue;elsebreak;}else if(ch >= 32 && ch <= 126) {    //可打印字符cout << static_cast<char> (ch);get += ch;}}return true;
}
//菜单功能
void save() {while (1) {system("cls");cout << "> Polynomial Calculator > Save a polynominal\n\n"<< "e.g. p=(1,2)(1,0)\n\n";int flag = 0;string input;if (!inputEsc(input))break;if (input.find(' ') != -1)flag = 1;else {size_t count = 0;for (size_t i = 1; i < input.length(); i++) //i begin with 1if (input[i] == '=')count++;if (count != 1)flag = 1;}string name, poly;if (!flag) {name = input.substr(0, input.find('='));poly = input.substr(input.find('=') + 1);if (!polyIsValid(poly) || !nameIsValid(name))flag = 1;else if (nameExist(name))flag = 2;}if (flag == 0) {cal->current = poly;cal->addPoly(name, cal->current);cout << endl << name << " = ";cal->printPoly(name);cout << " successfully saved!\n\n"<< "Press any key to return";_getch();break;}if (flag == 1)cout << "\nSyntax Error!\n";else if (flag == 2)cout << "\nExistent Name!\n";cout << "\nPress Esc to return, other keys to continue";if (_getch() == 27)break;}
}
//识别是具体多项式或是名称,并进行合法性判断
int judge(const string target) {int flag = 0;if (target.find(' ') != -1)flag = 1;else {if (target[0] == '(') {if (!polyIsValid(target))flag = 1;elseflag = 2;}else {if (!nameIsValid(target))flag = 1;elseflag = 3;}if (flag == 3 && !nameExist(target))flag = 4;if (flag == 1)cout << "\nSyntax Error!\n";else if (flag == 4)cout << "\nNon-Existent Name!\n";}return flag;
}
//左右多项式的输入
int leftright() {string left, right;cout << "Input a concrete polynominal or its name if only existed.\n\n";cout << "Lvalue:\n";if (!inputEsc(left))return 0;int flag = judge(left);if (flag == 1 || flag == 4) {cout << "\nPress Esc to return, other keys to continue";if (_getch() == 27)return 0;return 1;}else if (flag == 2)cal->left = left;else if (flag == 3)cal->left = cal->getPoly(left);cout << "\nRvalue:\n";if (!inputEsc(right))return 0;flag = judge(right);if (flag == 1 || flag == 4) {cout << "\nPress Esc to return, other keys to continue";if (_getch() == 27)return 0;return 1;}else if (flag == 2)cal->right = right;else if (flag == 3)cal->right = cal->getPoly(right);return 2;
}
//保存结果多项式
int saveResult() {cout << "\nInput 1 to return, 2 to save the result, other to continue\n";string ch;if (!inputEsc(ch))return 0;if (ch == "1")return 0;if (ch == "2") {while (1) {string name;cout << "\nName:\n";if(!inputEsc(name))return 0;if (!nameIsValid(name)) {cout << "\nSyntax Error!\n";continue;}if (nameExist(name)) {cout << "\nExistent Name!\n";continue;}cal->addPoly(name, cal->current);cout << endl << name << " = ";cal->printPoly(name);cout << " successfully saved!\n\n"<< "Press any key to return";_getch();return -1;}}return 1;
}
//菜单功能 + - * == 操作
void operate(const char ch) {while (1) {system("cls");//打印目前功能if (ch == '+')cout << "> Polynomial Calculator > Addition\n\n";else if (ch == '-')cout << "> Polynomial Calculator > Subtraction\n\n";else if (ch == '*')cout << "> Polynomial Calculator > Multiplication\n\n";else if (ch == '=')cout << "> Polynomial Calculator > Judgement\n\n";//显示记录if (!cal->empty()) {cout << ">Record:\n\n";cal->display();cout << endl;}//输入左右多项式int flag = leftright();if (flag == 0)break;else if (flag == 1)continue;//对左右多项式进行相应操作if (ch == '+') {cal->current = cal->left + cal->right;cout << endl << "(" << cal->left << ")+(" << cal->right << ") = "<< cal->current << endl;}else if (ch == '-') {cal->current = cal->left - cal->right;cout << endl << "(" << cal->left << ")-(" << cal->right << ") = "<< cal->current << endl;}else if (ch == '*') {cal->current = cal->left * cal->right;cout << endl << "(" << cal->left << ")*(" << cal->right << ") = "<< cal->current << endl;}else if (ch == '=') {if (cal->left == cal->right)cout << endl << cal->left << " = " << cal->right << endl;elsecout << endl << cal->left << " != " << cal->right << endl;}//保存结果(判断相等除外)if (ch != '=') {flag = saveResult();if (flag == 0)break;else if (flag == -1) {break;}}//判断相等的选择返回或继续else{cout << "\nPress Esc to return, other keys to continue";if (_getch() == 27)break;}continue;}
}
//菜单功能
void dif() {while (1) {system("cls");string left;//打印目前功能cout << "> Polynomial Calculator > Differentiation\n\n";//显示记录if (!cal->empty()) {cout << ">Record:\n\n";cal->display();cout << endl;}//输入多项式cout << "Input a concrete polynominal or its name if only existed.\n\n";cout << "Object:\n";if (!inputEsc(left))break;int flag = judge(left);if (flag == 1 || flag == 4) {cout << "\nPress Esc to return, other keys to continue";if (_getch() == 27)break;continue;}else if (flag == 2)cal->left = left;else if (flag == 3)cal->left = cal->getPoly(left);cal->current = cal->left.differentiate();cout << endl << "(" << cal->left << ")' = " << cal->current << endl;//保存结果flag = saveResult();if (flag == 0)break;else if (flag == -1) {cin.ignore();break;}continue;}
}
//菜单功能
void evl() {while (1) {system("cls");string left, right;//打印目前功能cout << "> Polynomial Calculator > Evaluation\n\n";//显示记录if (!cal->empty()) {cout << ">Record:\n\n";cal->display();cout << endl;}//输入多项式cout << "Input a concrete polynominal or its name if only existed.\n\n";cout << "Object:\n";if (!inputEsc(left))break;int flag = judge(left);if (flag == 1 || flag == 4) {cout << "\nPress Esc to return, other keys to continue";if (_getch() == 27)break;continue;}else if (flag == 2)cal->left = left;else if (flag == 3)cal->left = cal->getPoly(left);//输入x的值float assign;bool tem = false;while (1) {cout << "\nx = ";if (!inputEsc(right)) {tem = true;break;}if (floatValid(right)) {const char* input = right.c_str();assign = (float)atof(input);break;}elsecout << "\nSyntax Error!\n"; }if (tem)break;//打印结果cout << endl << cal->left << " = " << cal->left.evaluate(assign) << " when x = "<< assign << endl;cout << "\nPress Esc to return, other keys to continue";if (_getch() == 27)break;continue;}
}
//菜单功能
void dsp() {while (1) {system("cls");string left, right;cout << "> Polynomial Calculator > Display Record\n\n";if (cal->empty()) {cout << "Empty!\n\nPress any key to return";_getch();break;}//记录非空else {cal->display();//选择删除某条记录或返回cout << "\nPress D to delete a polynominal, Esc to return";char ch = _getch();if (ch == 'D' || ch == 'd') {while (1) {system("cls");cout << "> Polynomial Calculator > Display Record > Delete A Record\n\n";cal->display();string name;cout << "\nName:\n";if (!inputEsc(name)) {ch = 27;break;}if (!nameExist(name)) {cout << "\nNon-Existent Name!\nPress Esc to return the menu, others to return\n";ch = _getch();break;}cout << "\nDelete " << name << " = ";cal->printPoly(name);cout << " ?\n\nPress Y to delete, Esc to return the menu, others to return.\n";ch = _getch();if (ch == 'y'||ch=='Y') {cal->deletePoly(name);cout << endl << name << " successfully deleted!";cout << "\nPress Esc to return the menu, others to return";ch = _getch();}break;}}if (ch == 27)break;}}
}
//菜单功能
void res() {system("cls");cout << "> Polynomial Calculator > Reset\n\n";cout << "Press Y to reset, other keys to return";char ch = _getch();if (ch == 'Y' || ch == 'y') {cal->clear();cout << "\n\nReset successfully! Press any key to return";_getch();}
}
//读文件
void read() {cal->read();
}
//写文件
void write() {cal->write();
}

Calculator.h

#pragma once
#include"Polynominal.h"
using namespace std;
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \TypeName(const TypeName&);               \void operator=(const TypeName&)
class Calculator {
public:static Calculator* getInstance();static void deleteInstance();void addPoly(const string name, const Polynominal & poly);void Calculator::deletePoly(const string name);void printPoly(const string name);bool nameExist(const string name);void display();bool empty();Polynominal & getPoly(const string name);Polynominal left;Polynominal right;Polynominal current;void clear();void read();void write();
private:map<string, Polynominal> Poly;Calculator();~Calculator();static Calculator* instance;DISALLOW_COPY_AND_ASSIGN(Calculator);
};

Calculator.cpp

#include"Calculator.h"
#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>using namespace std;Calculator* Calculator::instance = NULL;
Calculator* Calculator::getInstance() {if (instance == NULL)instance = new Calculator;return instance;
}
void Calculator::deleteInstance() {if (instance != NULL)delete instance;instance = NULL;
}
void Calculator::addPoly(const string name, const Polynominal & poly) {Poly.insert(pair<string,Polynominal>(name, poly));
}
void Calculator::deletePoly(const string name) {Poly.erase(name);
}
void Calculator::printPoly(const string name) {cout << Poly.find(name)->second;
}
bool Calculator::nameExist(const string name) {if (Poly.find(name) != Poly.end())return true;return false;
}
void Calculator::display() {for (auto & x : Poly) {const char* out = x.first.c_str();cout << "  " << setw(10) << out << " = " << x.second << endl;}
}
bool Calculator::empty() {return Poly.empty();
}
Polynominal & Calculator::getPoly(const string name) {return Poly.find(name)->second;
}
void Calculator::clear() {Poly.clear();
}
void Calculator::read() {ifstream in("record", ios::binary | ios::in);if (in.is_open()) {while (in.peek() != EOF) {string name, poly;getline(in, name);getline(in, poly);current = poly;addPoly(name, current);}in.close();}
}
void Calculator::write() {ofstream out("record", ios::binary | ios::out);if (out.is_open()) {for (auto x : Poly) {const char* name = x.first.c_str();out << name << endl;for (auto y : x.second.Term)out << "(" << y.second << "," << y.first << ")";out << endl;}out.close();}else {cerr << "Unknown Error!";system("pause");}
}
Calculator::~Calculator() {Poly.clear();
}
Calculator::Calculator() {}

Polynominal.h

#pragma once
#include<map>
//#include"Term.h"
using namespace std;
class Polynominal {
public:Polynominal();Polynominal(const Polynominal & source);Polynominal(const string input);~Polynominal();Polynominal operator+(const Polynominal & right);Polynominal operator-(const Polynominal & right);Polynominal operator*(const Polynominal & right);Polynominal & operator=(const Polynominal & source);Polynominal & operator=(const string Input);Polynominal differentiate();float evaluate(float num);bool operator==(const Polynominal & other);bool invalid_0();bool empty();friend ostream & operator<<(ostream & out, const Polynominal & Poly);map<int, float> Term;void addTerm(int exp, float coef);
};

Polynominal.cpp

#include"Polynominal.h"
#include<string>
#include<cmath>
#include<sstream>
using namespace std;
Polynominal::Polynominal(){}
Polynominal::Polynominal(const Polynominal & source) {for (auto & x : source.Term)Term.insert(pair<int, float>(x.first, x.second));
}
Polynominal::Polynominal(const string input) {int count = 0;for (size_t i = 0; i < input.length(); i++)if (input[i] == '(')count++;stringstream in(input);for (int i = 0; i < count; i++) {int exp;float coef;char ch;in >> ch >> coef >> ch >> exp >> ch;addTerm(exp, coef);}
}
Polynominal::~Polynominal() {Term.clear();
}
Polynominal Polynominal::operator+(const Polynominal & right) {Polynominal des(*this);for (auto & x : right.Term)des.addTerm(x.first, x.second);return des;
}
Polynominal Polynominal::operator-(const Polynominal & right) {Polynominal des(*this);for (auto & x : right.Term)des.addTerm(x.first, x.second*(-1));return des;
}
Polynominal Polynominal::operator*(const Polynominal & right) {Polynominal result;for (auto & i : Term)for (auto & j : right.Term)result.addTerm(i.first + j.first, i.second*j.second);return result;
}
Polynominal & Polynominal::operator=(const Polynominal & source) {Term.clear();for (auto & x : source.Term)Term.insert(pair<int, float>(x.first, x.second));return *this;
}
Polynominal & Polynominal::operator=(const string Input) {Term.clear();string input = Input;while (1) {stringstream in(input);int exp;float coef;char ch;in >> ch >> coef >> ch >> exp >> ch;addTerm(exp, coef);size_t pos = input.find(')') + 1;if (pos >= input.length())break;input = input.substr(pos);}return *this;
}
float Polynominal::evaluate(float num) {float value = 0;for (auto & x : Term)value += x.second*pow(num, x.first);return value;
}
Polynominal Polynominal::differentiate() {Polynominal result;for (auto & x : Term)if (x.first != 0)result.addTerm(x.first - 1, x.second*x.first);return result;
}
bool Polynominal::operator==(const Polynominal & other) {auto iter = other.Term.begin();for (auto & x : Term) {if (iter == other.Term.end())return false;if (x.first != iter->first || fabs(x.second - iter->second) >= 1e-6)return false;iter++;}return true;
}
bool Polynominal::invalid_0() {auto iter = Term.begin();if (iter->first < 0)return true;return false;
}
bool Polynominal::empty() {return Term.empty();
}
ostream & operator<<(ostream & out, const Polynominal & Poly) {if (Poly.Term.empty())out << "0";else {for (auto iter = Poly.Term.rbegin(); iter != Poly.Term.rend(); iter++) {if (iter->first == 0)out << iter->second;else {if (fabs(iter->second + 1) < 1e-6)out << "-";else if (fabs(iter->second - 1) >= 1e-6)out << iter->second;out << "x";if (iter->first != 1) {if (iter->first > 0)out << "^" << iter->first;elseout << "^" << "(" << iter->first << ")";}}auto itor = iter;if (++itor != Poly.Term.rend() && itor->second > 0)out << "+";}}return out;
}
void Polynominal::addTerm(int exp, float coef) {if (fabs(coef) < 1e-6)return;auto iter = Term.find(exp);if (iter == Term.end())Term.insert(pair<int, float>(exp, coef));else {iter->second += coef;if (fabs(iter->second) < 1e-6)Term.erase(iter);}
}

C++ 多项式计算器相关推荐

  1. QT,C++多项式计算器—version3(厌倦CMD黑框框的走起!)

    很激动! 在乔帮主的要求下,我再次写一次多项式计算器.(对了,这里用的是QT5) QT的下载在download 或者一般的官网上都有(QT 只是一个加载库!请各位初学者不要害怕!但是下好了QT的软件之 ...

  2. linux科学计算器设计,课内资源 - Linux环境下的多项式计算器的实现

    1 实验目的实现一个多项式计算器 2 实验环境Linux下(g++编译) 3 分析与设计 3.1 需求分析:需要实现的基本功能有: 在任何时候能够返回主菜单界面 存储多项式 多项式加法 多项式减法 多 ...

  3. 完整版一元稀疏多项式计算器

    一元稀疏多项式计算器 [问题描述]: 设计一个一元稀疏多项式简单计算器. [基本要求]: 一元稀疏多项式简单计算器的基本功能是: (1)输出并建立多项式: (2)输出多项式,输出形式为整数序列:n,c ...

  4. 数据结构课程设计---实现一元稀疏多项式计算器

    课程设计课题: 设计一个一元稀疏多项式简单计算器,能够实现五大基本功能: (1)输入并建立多项式: (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,-,cn,en,其中n是多项式的项 ...

  5. XDOJ-一元稀疏多项式计算器

    一元稀疏多项式计算器 要变得更强. ----更新---- 下面同学说的问题我改正啦. 没改之前: 可以看到多了个负号,是因为在这个结构体里面,第一项就是0,因此会跳过打印多项式对fooo[0]的求解, ...

  6. 已知稀疏多项式C语言版,一元稀疏多项式计算器C语言课程设计

    <一元稀疏多项式计算器C语言课程设计>由会员分享,可在线阅读,更多相关<一元稀疏多项式计算器C语言课程设计(26页珍藏版)>请在人人文库网上搜索. 1.学号2014-2015学 ...

  7. 基于Java实现的一元稀疏多项式计算器

    资源下载地址:https://download.csdn.net/download/sheziqiong/85896976 资源下载地址:https://download.csdn.net/downl ...

  8. 基于Java语言实现一元稀疏多项式计算器【100010608】

    1.实验内容 一元稀疏多项式计算器 使用语言:Java 语言 编译环境:openJDk-1.8 2.问题描述 设计一个简易的一元稀疏多项式计算器. 3.需求分析 经过分析,本系统需完成的主要功能如下: ...

  9. 用java的jni调用C语言的API,实现带图形界面的一元稀疏多项式计算器

    实现步骤: 1) 完成Java代码,编写好Java调用类. 2) 编译你的Java类. 3) 用javah生成编译好的class文件对应的C/C++ 函数的头文件. 4) 实现头文件中的函数原型,编写 ...

  10. XDOJ 一元稀疏多项式计算器 C

    前言 让汗水成为铠甲,把困顿化为良机. 题干 问题描述 一元 n 次多项式p0 x^0+···+pi x^i···+pn x^n项数较少时成为一元稀疏多项式, 例如:3 + 6 x^3 − 2 x^8 ...

最新文章

  1. 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式
  2. react gps坐标转换_手持GPS的三参数计算方法
  3. mybatis第一讲:初探mybatis实现简单的查询
  4. Python编程基础:第九节 逻辑运算Logical Operators
  5. Git初学札记(七)————合并分支(merge)
  6. linux 命令详解 十六
  7. php html显示mysql数据库_从数据库调出数据显示到页面 PHP+Mysql+Html(简单实例)...
  8. 服务器上的VGA切换原理,什么是VGA接口 原理及特点是什么
  9. android 恢复出厂设置原理,Android恢复出厂设置流程分析【Android源码解析十】
  10. WSA工具箱安装应用商店提示无法工作怎么解决?
  11. [机缘参悟-14]:哲学、唯物主义、唯心主义与空无主义
  12. 3种在JavaScript中验证电子邮件地址的方法
  13. Xcode修改项目名称
  14. 傅里叶变换短时傅里叶变换小波变换
  15. 光盘和U盘安装win7和ubuntu14.04全步骤
  16. swift3.0 GCD
  17. 八维计算机学校张家口,八维学校真实校园情况?
  18. 约翰·卡马克-John Carmack
  19. vivado工程打包
  20. Stata16安装包下载及安装教程

热门文章

  1. Light oj 1004 - Monkey Banana Problem(DP)
  2. (附源码)计算机毕业设计SSM留守儿童管理平台
  3. 蜜蜂蚂蚁数据集分类(tensorflow)
  4. 文件上传(transferTo)
  5. DirectX12学习笔记(六)Drawing in Direct3D
  6. win11卸载tomcat9
  7. C++ opencv之图像直方图(calcHist)
  8. RPC — 微服务之gRPC框架技术解析
  9. OpenGL旋转立方体的实现
  10. 瑞星FOR VISTA 仍然不能升级!!!报错“抱歉,此安装包不能在当前版本的Windows上运行”...