分数相加
class Solution {
public:
string fractionAddition(string exp) {
int x = 0, y = 1; // 分子,分母
int i=0,j;
int x1,y1,sign=1;//符号是带在分子上面的
string tmp;
while(i<exp.size()){
if(exp[i]=='-'){
sign=-1;
i++;
}
else if(exp[i]=='+'){
sign=1;
i++;
}
else{
while((isdigit(exp[i]))){
tmp.push_back(exp[i]);
i++;
}
x1=sign*stoi(tmp);//符号是带在分子上面的
tmp="";//清空
i++;//跳过除号
while((isdigit(exp[i]))){
tmp.push_back(exp[i]);
i++;
}
y1=stoi(tmp);
tmp="";//清空
x=x*y1+x1*y;
y=y*y1;
}//扫描完分母就进行一次运算
}
if (x == 0) {
return "0/1";
}
int g = __gcd(abs(x), y); // 获取最大公约数
string out;
out=to_string(x / g) + "/" + to_string(y / g);
return out;
}
};
求解方程
class Solution {
public:
string solveEquation(string e) {
int xishu = 0, val = 0;
int flag=1;
int i=0,n= e.size(),sign=1; // 等式左边默认系数为正
int j;
string tmp;
while(i<n){
if (e[i] =='+') {
sign=1; // 等式右边默认系数为负
i++;
}
else if(e[i] =='-'){// 去掉前面的符号
sign=-1;
i++;
}
else if(e[i] =='='){// 去掉前面的符号
flag=-1;
sign=1;//重新置一
i++;
}
else{//处理系数和值
while(isdigit(e[i])){
tmp.push_back(e[i]);
i++;
}
if(e[i]=='x'){//如果扫描到了x就说明是系数
if(!tmp.empty()){
xishu=xishu+sign*flag*stoi(tmp);
tmp="";
}else{
xishu=xishu+sign*flag*1;
}
i++;//跳过x
}else{//没扫描到x就是值
val=val+sign*flag*stoi(tmp);
tmp="";
}
}
}
if (xishu == 0) {
return val == 0 ? "Infinite solutions" : "No solution";
}
return string("x=") + to_string(-val / xishu);
}
};