给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果。 这个结果应该是不可约分的分数,即最简分数。 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母为 1。所以在上述例子中, 2 应该被转换为 2/1
    示例 1:

    1. 输入:"-1/2+1/2"
    2. 输出: "0/1"

    示例 2:

    输入:"-1/2+1/2+1/3"
    输出: "1/3"
    

    示例 3:

    输入:"1/3-1/2"
    输出: "-1/6"
    

    示例 4:

    输入:"5/3+1/3"
    输出: "2/1"
    

    说明:

    1. 输入和输出字符串只包含 '0''9' 的数字,以及 '/', '+''-'
    2. 输入和输出分数格式均为 ±分子/分母。如果输入的第一个分数或者输出的分数是正数,则 '+' 会被省略掉。
    3. 输入只包含合法的最简分数,每个分数的分子分母的范围是 [1,10]。 如果分母是1,意味着这个分数实际上是一个整数。
    4. 输入的分数个数范围是 [1,10]。
    5. 最终结果的分子与分母保证是 32 位整数范围内的有效整数。
    class Solution {
    public:
        string fractionAddition(string expression) {
            int a_x, a_y;
            int r_x, r_y;
            a_x = 0;
            a_y = 1;
            r_x = 0;
            r_y = 1;
            int right = 0;
            int flag = true;
            if(expression.size() == 0){
                return "0/1";
            }
            while(right <= expression.size()){
                int left = right;
                while(right <= expression.size() && expression[right] != '-' && expression[right] != '+' && expression[right] != '/'){
                    right++;
                }
                if(right >= expression.size()){
                    if(right - left > 0)
                        a_y = stoi(expression.substr(left , expression.size() - left));
                    r_x = a_x * r_y + a_y * r_x; 
                    r_y = a_y * r_y;
                    // cout<<"s: "<<r_x<<" "<<r_y<<endl;
                    break;
                }
                if(expression[right] == '-'){
                    flag = false;
                    if(right - left > 0)
                        a_y = stoi(expression.substr(left , right - left));
                    r_x = a_x * r_y + a_y * r_x; 
                    r_y = a_y * r_y;
                }else if(expression[right] == '+'){
                    flag = true;
                    if(right - left > 0)
                        a_y = stoi(expression.substr(left, right - left));
                    r_x = a_x * r_y + a_y * r_x; 
                    r_y = a_y * r_y;
                }else if(expression[right] == '/'){
                    a_x = stoi(expression.substr(left, right - left));
                    if(flag == false){
                        a_x = -a_x;
                    }
                }
                right++;
            }
            for(int j = max(abs(r_x), abs(r_y)); j >0; j--){
                if(r_x % j == 0 && r_y % j == 0){
                    r_x = r_x / j;
                    r_y = r_y / j;
                }
            }
            return to_string(r_x) + "/" + to_string(r_y);
        }
    };