求解方程和分数相加

分数相加

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);
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值