C++分数表达式加减运算实现
C++11虽然有radio库,但用起来也没那么方便
代码简单易懂,就不注释了
string fractionAddition(string expression) {
expression.push_back('+');
vector<int> fenzi;
vector<int> fenmu;
int i=expression[0]=='-'?0:-1,j=0;
while(j<expression.size()){
//cout<<i<<" "<<j<<endl;
if(expression[j]=='/'){
int t=atoi(expression.substr(i+1,j-i-1).c_str());
if(i>=0&&expression[i]=='-') t*=-1;
fenzi.push_back(t);
i=j;
}
else if(expression[j]=='+'||(expression[j]=='-'&&j!=0)){
fenmu.push_back(atoi(expression.substr(i+1,j-i-1).c_str()));
i=j;
}
++j;
}
int fm=1;
int fz=0;
for(int& f:fenmu) fm*=f;
for(int i=0;i<fenzi.size();++i){
//cout<<fenzi[i]<<" "<<fenmu[i]<<endl;
fz+=fenzi[i]*fm/fenmu[i];
}
int _gcd=gcd(fz,fm); //gcd函数需要C++17版本
//cout<<fz<<" "<<fm<<" "<<_gcd<<endl;
return to_string(fz/_gcd)+"/"+to_string(fm/_gcd);
}
还没有评论,来说两句吧...