本文主要是介绍c++分部混合运算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
刚刚开始自学c++写了一个进行分部混合运算的程序
没写除法,因为还要转化成浮点型好麻烦呀
运行效果:
代码部分
#include<iostream>
#include<string>
#include<cstdlib>
#include<sstream>
using namespace std;int main()
{
string base;
getline(cin,base);
void getaway(string base);
getaway(base);
system("pause");
return 0;
}void getaway(string base)
{
string mix(string part);
int sizeob;
int leftear[3][100];
int rightear[3][100];
int num_ear=0,lef=0,rig=0;
sizeob=base.size();
for(int i=0;i<sizeob;i++)
{if(base[i]=='('){leftear[0][lef]=i;leftear[1][lef]=num_ear;leftear[2][lef]=lef-(num_ear-lef);lef+=1;num_ear+=1;}if(base[i]==')'){rightear[0][rig]=i;rig+=1;num_ear+=1;}
}
int max_let_pos=0;
for(int i=0;i<lef;i++)
{max_let_pos=max_let_pos>leftear[2][i]?max_let_pos:leftear[2][i];}
int times=0;
for(int i=0;i<lef;i++)
{if(leftear[2][i]==max_let_pos){times+=1;}}
while(times>0)
{for(int i=0;i<=lef;i++){leftear[0][i]=0;leftear[1][i]=0;leftear[2][i]=0;}for(int i=0;i<=rig;i++){rightear[0][i]=0;}sizeob=base.size();num_ear=0;lef=0;rig=0;for(int i=0;i<sizeob;i++){if(base[i]=='('){leftear[0][lef]=i;leftear[1][lef]=num_ear;leftear[2][lef]=lef-(num_ear-lef);lef+=1;num_ear+=1;}if(base[i]==')'){rightear[0][rig]=i;rig+=1;num_ear+=1;}}for(int i=0;i<lef;i++){if(leftear[2][i]==max_let_pos){for(int j=0;j<rig;j++){if(leftear[0][i]<rightear[0][j]){string part(base,leftear[0][i]+1,rightear[0][j]-leftear[0][i]-1);base.replace(leftear[0][i],rightear[0][j]-leftear[0][i]+1,mix(part));break;}}break;}}times-=1;
}
cout<<'='<<base<<endl;
int newbsize;
int earnum=0;
int signum=0;
newbsize=base.size();
for(int i=0;i<newbsize;i++)
{if(base[i]=='('||base[i]==')'){earnum+=1;}if(i>0&&(base[i]=='+'||base[i]=='-'||base[i]=='*'||base[i]=='/'||base[i]=='^'||base[i]=='!')){signum+=1;}}
if(earnum>0)
{getaway(base);}
else if(earnum==0&&signum!=0)
{cout<<'='<<mix(base)<<endl;}}string mix(string part)
{string newpart;int partsize;partsize=part.size();/*****************************/int sums=0;int sign=1;string nums;int control=0;/*****************************/for(int i=0;i<partsize;i++){if(part[i]!='+'&&part[i]!='-'&&part[i]!='*'&&part[i]!='/'&&part[i]!='^'&&part[i]!='!'){if(control==0){nums.append(part,i,1);}}if(part[i]=='+'){int nu=atoi(nums.c_str());sums=sums+sign*nu;sign=1;nums.erase(nums.begin(),nums.end());control=0;}if(part[i]=='-'){int nu=atoi(nums.c_str());sums=sums+sign*nu;sign=-1;nums.erase(nums.begin(),nums.end());control=0;}if(part[i]=='!'){int nu=atoi(nums.c_str());int pronum=1;for(int i=1;i<=nu;i++){pronum*=i;}stringstream sss;sss<<pronum;nums=sss.str();}if(part[i]=='^'){int nu=atoi(nums.c_str());string anothernu;for(int j=i+1;j<partsize;j++){if(part[j]!='+'&&part[j]!='-'&&part[j]!='*'&&part[j]!='/'&&part[j]!='^'&&part[j]!='!'){anothernu.append(part,j,1);}else{break;}}int nua=atoi(anothernu.c_str()); int pro=1;for(int i=0;i<nua;i++){pro*=nu;}stringstream ssss;ssss<<pro;nums=ssss.str();control=1;}if(part[i]=='*'){int nu=atoi(nums.c_str());sign=sign*nu;nums.erase(nums.begin(),nums.end());}}int nu=atoi(nums.c_str());sums=sums+sign*nu;stringstream ss;ss<<sums;newpart=ss.str();return newpart;/*else{if(havef!=0){for(int i=0;i<partsize;i++){if(part[i]=='+'||part[i]=='-'||part[i]=='*'||part[i]=='/'||part[i]=='^'){nums.erase(nums.begin(),nums.end());}if(part[i]!='+'&&part[i]!='-'&&part[i]!='*'&&part[i]!='/'&&part[i]!='^'&&part[i]!='!'){nums.append(part,i,1);}if(part[i]=='!'){part.replace(i,1,"+");mix(part);int sums=1;for(int j=1;j<=atoi(nums.c_str());j++){sums*=j;}}}}}*/}
这篇关于c++分部混合运算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!