leetcode-592:分数加减运算

简介: leetcode-592:分数加减运算

题目

题目连接

给定一个表示分数加减运算的字符串 expression ,你需要返回一个字符串形式的计算结果。

这个结果应该是不可约分的分数,即最简分数。 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母为 1。所以在上述例子中, 2 应该被转换为 2/1。

示例 1:

输入: expression = "-1/2+1/2"
输出: "0/1"

示例 2:

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

示例 3:

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

解题

方法一:模拟

参考链接

class Solution {
public:
    string fractionAddition(string expression) {
        long long a=0,b=1;//分子,分母
        int index=0,n=expression.size();
        while(index<n){
            //读取正负符号
            int sign=1;//如果没有遇到符号,默认正的
            if(expression[index]=='+'||expression[index]=='-'){
                sign=expression[index]=='+'?1:-1;
                index++;
            }
            //读取分子
            long long a1=0;
            while(isdigit(expression[index])){
                a1=a1*10+expression[index]-'0';
                index++;
            }
            index++;//跳过'/'
            //读取分母
            long long b1=0;
            while(isdigit(expression[index])){
                b1=b1*10+expression[index]-'0';
                index++;
            }
            a1=a1*sign;
            a=a*b1+a1*b;
            b=b*b1;
        }
        if(a==0) return "0/1";
        long long g=gcd(abs(a),b);//获取最大公约数
        return to_string(a/g)+"/"+to_string(b/g);
    }
};
相关文章
|
7月前
leetcode-1447:最简分数
leetcode-1447:最简分数
49 0
|
7月前
|
算法 测试技术 C#
【贪心算法】【中位贪心】LeetCode:100123.执行操作使频率分数最大
【贪心算法】【中位贪心】LeetCode:100123.执行操作使频率分数最大
|
7月前
[leetcode 数位运算] 2578.最小分割和
[leetcode 数位运算] 2578.最小分割和
|
7月前
leetcode:268. 丢失的数字(异或运算)
leetcode:268. 丢失的数字(异或运算)
37 0
|
7月前
|
算法 测试技术 C#
二分查找|差分数组|LeetCode2251:花期内花的数目
二分查找|差分数组|LeetCode2251:花期内花的数目
|
7月前
leetcode-856:括号的分数
leetcode-856:括号的分数
42 0
|
7月前
|
测试技术
leetcode-241:为运算表达式设计优先级
leetcode-241:为运算表达式设计优先级
39 0
|
7月前
|
SQL
leetcode-SQL-1988. 找出每所学校的最低分数要求
leetcode-SQL-1988. 找出每所学校的最低分数要求
30 0
|
7月前
leetcode-1984:学生分数的最小差值
leetcode-1984:学生分数的最小差值
49 0
|
7月前
|
Go
golang力扣leetcode 1447.最简分数
golang力扣leetcode 1447.最简分数
45 0