德玛西亚99
#include <windows.h>#include <iostream>#include <fstream>#include <string>#include <cmath>using namespace std;const char NUM[]={'0','1','2','3','4','5','6','7','8','9','.'};const char OPERATION[]={'+','-','*','/'};const double PI=3.14159265358979;const double EE=2.71828182818281;class Fun //处理系统数学函数的类{public:Fun(string o,int t,double l=0.0,double r=0.0):op(o),type(t),lvalue(l),rvalue(r){}static string FUN[];double calc();private:int type; //666 0 1 sin90 2 3! 3 3C2string op; //函数类型double lvalue; //函数左边的值double rvalue; //函数右边的值static int FunNum;};int Fun::FunNum=8;string Fun::FUN[]={"!","sin","cos","tan","log","ln","C","A","^"};/*函数说明:1:log是以10为底的工程对数2:ln 是以e为底的自然对数3:C 计算组合数 输入规则 如计算 3取2的组合 输入表达式 3C24:A 计算排列数 输入规则 如计算 3取2的排列 输入表达式 3A25:! 计算阶乘6:^ x的y次方 输入 x^y*/int factorial(int n) //阶乘函数{int i,s=1;for(i=1;i<=n;i++)s*=i;return s;}int C(int a,int b){return factorial(a)/(factorial(b)*factorial(a-b));}int A(int a,int b){return factorial(a)/factorial(b);}double Fun::calc() //计算系统函数的值{if(type==0)return lvalue;else{if(op=="!")return factorial(lvalue);if(op=="sin")return sin(rvalue/180*PI);if(op=="cos")return cos(rvalue/180*PI);if(op=="tan")return tan(rvalue/180*PI);if(op=="log")return log10(rvalue);if(op=="ln")return log10(rvalue)/log10(EE);if(op=="C")return C(lvalue,rvalue);if(op=="A")return A(lvalue,rvalue);if(op=="^")return pow(lvalue,rvalue);else{string err="暂时没有函数"+op;MessageBox(NULL,err.c_str(),"错误",MB_OK);return 0;}}}struct Unit //双向链表保存运算单元{Unit(int p,char o,string c,double v,int t,Unit * pr=NULL,Unit * n=NULL):PRI(p),Operation(o),Code(c),value(v),Type(t),Pre(pr),Next(n){}int PRI; //优先级char Operation; //操作符string Code; //原始代码double value; //数据