我写的最长的程序算诸如(-3)*2+6^27-98/7的表达试的值的
作者:董成城 标签:程序 | 阅读次数:60 |
![]() ![]() ![]() |
| ![]() ![]() ![]() |
#include
#include #include #include typedef vector vector vector char you[8][8]={{'<','<','<','<','>','e','<','>'}, // + {'<','<','<','<','>','e','<','>'}, // - {'>','>','<','<','>','e','<','>'}, // * {'>','>','<','<','>','e','<','>'}, // / {'>','>','>','>','>','e','e','>'}, // ( {'<','<','<','<','=','e','<','e'}, // ) {'>','>','>','>','>','e','<','>'}, // ^ {'e','e','e','e','e','e','e','e'}}; // # char yun[8] = {'+','-','*','/','(',')','^','#'}; long top=0,i=0; ifstream fin("D:\\group.txt"); ofstream fout("D:\\answer.txt"); char bijiao(char x,char y); void jia(vector void jian(vector void cheng(vector void chu(vector void cifang(vector void shuan(char ch); void shuchu(vector bool dengjia(vector //main procedure begins here. main(){ char c,w; bool b=false; fu.push_back('#'); fin>>c; while (c!='#'){ if (c>='0'&&c<='9'){ vector tmp.push_back(1); while(c>='0'&&c<='9'){ tmp.push_back(c-'0'); fin>>c; } i++; shu.push_back(tmp); continue; }else{ if (c=='-'&&b){ vector fin>>c; tmp.push_back(-1); while(c>='0'&&c<='9'){ tmp.push_back(c-'0'); fin>>c; } i++; shu.push_back(tmp); fu.pop_back(); top--; fin>>c; continue; } b=(c=='(') ? true:false; w=fu[top]; while (bijiao(c,w)=='<'){ shuan(w); top--; w=fu[top]; fu.pop_back(); } if (bijiao(c,w)=='>'){ top++; fu.push_back(c); fin>>c; continue; } if (bijiao(c,w)=='='){ fu.pop_back(); top--; fin>>c; continue; } } } fin.close(); w=fu[top]; while (w!='#'){ shuan(w); top--; w=fu[top]; } shuchu(shu[0]); fout.close(); } //main procedure ends here. //bijiao procedure here it returns two operators you xian ji char bijiao(char x,char y){ int i=0,j=0; while (yun[i]!=x) i++; while (yun[j]!=y) j++; return you[i][j]; } //deng jia function here it compares two vector bool dengjia(vector int c1,c2,j,i; c1=ve1.size()-1; c2=ve2.size()-1; if (c1!=c2) return false; else{ for(i=0;((ve1[i]==ve2[i])&&(i else return false; } } //shu chu here it shu chu the final answer void shuchu(vector int i,j=ve.size(); if (ve[0]==-1) fout<<'-'; for (i=1;i<=j-1;i++) fout< //jia fa here it adds two numbers void jia(vector int c1,c2,j,i,c,d; vector c1=ve1.size()-1; c2=ve2.size()-1; d=(c1 j=0; if(ve1[0]*ve2[0]<0){ //yi hao if (ve1[0]==-1){ ve1[0]=1; jian(ve1,ve2); ve1[0]*=-1; }else{ ve2[0]=1; jian(ve1,ve2); } }else{ //tong hao v.push_back(ve1[0]); while((c!=0)&&(d!=0)){ v.push_back((ve1[c1]+ve2[c2]+j)%10); j=(ve1[c1]+ve2[c2]+j)/10; c--; d--; c1--; c2--; } if (ve1.size() v.push_back((ve2[c]+j)%10); j=(ve2[c]+j)/10; c--; } if (c>0) for (;c>0;c--) v.push_back(ve2[c]); else v.push_back(j); }else if(ve1.size()>ve2.size()){ while ((j!=0)&&(c>0)){ v.push_back((ve1[c]+j)%10); j=(ve1[c]+j)/10; c--; } if (c>0) while (c>0){ v.push_back(ve1[c]); c-- ; } else v.push_back(j); }else if (j!=0) v.push_back(j); i=v.size()-1; tmp.push_back(v[0]); while (i>0){ tmp.push_back(v[i]); i--; } ve1=tmp; } } //jian fa here void jian(vector int c1,c2,j,i; bool big; vector c1=ve1.size()-1; c2=ve2.size()-1; if(ve1[0]*ve2[0]<0){ //yi hao if (ve1[0]==-1){ ve2[0]=-1; jia(ve1,ve2); }else{ ve2[0]=1; jia(ve1,ve2); } }else{ //tong hao if (c1>c2) big=true; //bi jiao da xiao else if (c1 for(i=1;ve1[i]==ve2[i];i++); if (ve1[i]>ve2[i]) big=true; else big=false; } if (big){ //ve1 is larger i=c1; j=c2; while (j>0){ if (ve1[i]>=ve2[j]) ve1[i]-=ve2[j]; else{ int it=i-1; while (ve1[it]==0) it--; ve1[it]--; it++; while(it ve1[it]=9; it++; } ve1[i]=ve1[i]+10-ve2[j]; } i--; j--; } }else{ // ve2 is larger i=c1; j=c2; while (i>0){ if (ve2[j]>=ve1[i]) ve2[j]-=ve1[i]; else{ int it=i-1; while (ve2[it]==0) i--; ve2[it]--; it++; while(it it++; } ve2[j]=ve2[j]+10-ve1[i]; } i--; j--; } ve1=ve2; ve1[0]*=-1; } } j=ve1.size()-1; i=1; while((ve1[i]==0)&&(i if ((i==j)&&(ve1[i]==0)){ tmp[0]=1; tmp.push_back(0); }else for (;i<=j;i++) tmp.push_back(ve1[i]); ve1=tmp; } //cheng fa here void cheng(vector int c1,c2,i,t; vector c1=ve1.size()-1; c2=ve2.size()-1; tmp.push_back(1); for (t=c2;t>0;t--){ int ct=ve2[t],it,j=0; vector v.push_back(1); for (int in=0;in v.push_back((ve1[it]*ct+j)%10); j=(ve1[it]*ct+j)/10; } if (j!=0) v.push_back(j); tmp2.push_back(1); for (it=v.size()-1;it>0;it--) tmp2.push_back(v[it]); jia(tmp,tmp2); } vt.push_back(ve1[0]*ve2[0]); //copy and drop 0 t=tmp.size()-1; for (i=1;((tmp[i]==0)&&(i vt[0]=1; vt.push_back(0); }else while (i<=t){ vt.push_back(tmp[i]); i++; } ve1=vt; } //chu fa here void chu(vector vector int it; it=(ve1[0]*ve2[0]>0)?1:-1; v.push_back(1); v.push_back(0); tmp.push_back(1); tmp.push_back(1); ve1[0]=1; ve2[0]=1; jian(ve1,ve2); while (ve1[0]==1){ tmp2=ve2; jian(ve1,tmp2); jia(v,tmp); } ve1=v; ve1[0]=it; } //cheng fang here void chengfang(vector vector tmp2=ve1; v.push_back(1); v.push_back(1); tmp.push_back(1); tmp.push_back(1); while (!dengjia(v,ve2)){ cheng(ve1,tmp2); jia(v,tmp); } } //shuan here void shuan(char ch){ i--; switch(ch){ case '+' : jia(shu[i-1],shu[i]); break; case '-' : jian(shu[i-1],shu[i]); break; case '*' : cheng(shu[i-1],shu[i]); break; case '/' : chu(shu[i-1],shu[i]); break; case '^' : chengfang(shu[i-1],shu[i]); break; } shu.pop_back(); } |