1 条题解
-
0
理解
struct Re2_str_dou{ string Str=""; double Dou=0; }; struct Re2_int_int{ int Start=0; int End=0; }; Re2_int_int Bracket_found(string Sentence) { Re2_int_int Ret; int num=-1,a=0,b=0,total=0;//,copy=Sentence.size(); Ret.Start=Sentence.find('('); Sentence.erase(Ret.Start,1); while(!num){ //cout<<num<<endl; a=Sentence.find('('); b=Sentence.find(')'); if(a!=-1){//cout<<'a'; if(!num)break; num--; Sentence.erase(a,1); total++; } if(b!=-1){//cout<<'b'; if(!num)break; num++; Sentence.erase(b,1); total++; } } Ret.End=b+total; //cout<<"b="<<b<<endl; return Ret; } Re2_str_dou Mon(string Monomial) { Re2_str_dou Re; //cout<<Monomial<<endl; short Id=0; if(Monomial[0]=='-')Id=-1; else Id=1; //cout<<Id; if(Monomial[0]=='-' || Monomial[0]=='+')Monomial.erase(0,1); while( Monomial[0]>='0' && Monomial[0]<='9' || Monomial[0]=='.' || Monomial[0]=='x' || Monomial[0]=='*' || Monomial[0]=='p'){ //cout<<Monomial<<endl; if(Monomial[0]>='0' && Monomial[0]<='9' || Monomial[0]=='.') { short Flag=0; double Add=0; while(Monomial[0]>='0' && Monomial[0]<='9' || Monomial[0]=='.') { if(Flag){ Add+=(double)(Monomial[0]-'0')/Flag; Flag*=10; }else{ Add*=10; Add+=(double)(Monomial[0]-'0'); } Monomial.erase(0,1); if(Monomial[0]=='.'){ Flag=10; Monomial.erase(0,1); } } if(Re.Dou || Re.Dou)Re.Dou*=Add; else if(!Re.Dou)Re.Dou=Add; } if(Monomial[0]=='*')Monomial.erase(0,1); if(Monomial[0]=='x'){ if(Re.Dou && x)Re.Dou*=x; else Re.Dou=x; Monomial.erase(0,1); } if(Monomial[0]=='p' && Monomial[1]=='o' && Monomial[2]=='w' && Monomial[3]=='('){ //cout<<'a'; Monomial.erase(0,4); double Base=0,Index=0,ad=0; Re2_str_dou Re1; Re1=Mon(Monomial); Base=Re1.Dou; Monomial=Re1.Str; Monomial.erase(0,1);//cout<<Monomial; Re1=Mon(Monomial); Index=Re1.Dou; Monomial=Re1.Str; Monomial.erase(0,1); //cout<<"B"<<Base<<"I"<<Index<<' '; ad=pow(Base,Index); if(Re.Dou && ad)Re.Dou*=ad; else Re.Dou=ad; } } Re.Str=Monomial; Re.Dou*=Id; //cout<<Re.Dou<<endl; return Re; } double STR(string Monomial) { Monomial.erase(0,2); string Mo=""; double Sum=0; short Id=1; Re2_str_dou S; while(Monomial!="") { //cout<<'a'; Mo=""; Id=1; if(Monomial[0]=='-')Id=-1; if(Monomial[0]=='+' || Monomial[0]=='-')Monomial.erase(0,1); //cout<<Monomial<<endl; while( Monomial[0]>='0' && Monomial[0]<='9' || Monomial[0]=='.' || Monomial[0]=='x' || Monomial[0]=='x' || Monomial[0]=='p' || Monomial[0]=='o' || Monomial[0]=='w' || Monomial[0]=='(' || Monomial[0]==')' || Monomial[0]==',' || Monomial[0]=='*' ) { if(Monomial[0]=='p'){//cout<<'b'; Re2_int_int S1=Bracket_found(Monomial); //cout<<"VCR"<<S1.Start<<' '<<S1.End<<endl; for(int i=0;i<=S1.End;i++){ Mo+=Monomial[0]; Monomial.erase(0,1); } }else{ Mo+=Monomial[0]; Monomial.erase(0,1); } } if(Id==-1)Mo='-'+Mo; S=Mon(Mo); //cout<<S.Dou<<endl; Sum+=S.Dou; //cout<<Monomial<<' '<<Mo<<' '<<S.Dou<<endl; } return Sum; }
信息
- 编号
- 2373
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 17
- 已通过
- 1
- 上传者