592 分数加减运算(中等)

简介:

image-20221030163814157

解题思路:把握住一点,利用循环依次往后乘,这个题有思路但是不知道怎么写代码。下面是官方的代码。

#
# @lc app=leetcode.cn id=592 lang=python3
#
# [592] 分数加减运算
#

# @lc code=start
class Solution:
    def fractionAddition(self, expression: str) -> str:
        x, y = 0, 1  # 定义分子,分母
        i, n = 0, len(expression)
        while i < n:
            # 读取分子
            x1, sign = 0, 1
            if expression[i] == '-' or expression[i] == '+':
                if expression[i] == '-':
                    sign = -1
                i += 1
            while i < n and expression[i].isdigit():
                #表示十进制数太妙了
                x1 = x1*10+int(expression[i])
                i += 1
            x1 = sign*x1
            i += 1

            # 读取分母
            y1 = 0
            while i < n and expression[i].isdigit():
                y1 = y1*10+int(expression[i])
                i += 1
            x = x*y1+x1*y
            y *= y1
        if x == 0:
            return "0/1"
        # gcd函数取最大公约数
        g = gcd(abs(x), y)
        return f"{x//g}/{y//g}"
# @lc code=end
AI 代码解读
//C++版本代码 学习使用C++写代码
class Solution {
public:
    string fractionAddition(string expression) {
        long long x=0,y=1;//分子和分母
        int i=0,n=expression.size();
        while (i<n){
            //读取分子
            long long x1=0,sign=1;
            while (expression[i]=='-'||expression[i]=='+'){
                sign=expression[i]=='-'? -1:1;
                i++;
            }
            while(i<n && isdigit(expression[i])){
                x1=x1*10+expression[i]-'0';
                i++;
            }
            x1=sign*x1;
            i++;
            //读取分母
            long long y1=0;
            while(i<n && isdigit(expression[i])){
                y1=y1*10+expression[i]-'0';
                i++;
            }
            x=x*y1+x1*y;
            y*=y1;
        }
        if(x==0){
            return "0/1";
        }
        long long g=gcd(abs(x),y);//获取最大公约数
        return to_string(x/g)+"/"+to_string(y/g);

    }
};
AI 代码解读
目录
打赏
0
0
0
0
146
分享
相关文章
【数位】【数论】【分类讨论】2999. 统计强大整数的数目
【数位】【数论】【分类讨论】2999. 统计强大整数的数目
|
9月前
leetcode-2006:差的绝对值为 K 的数对数目
leetcode-2006:差的绝对值为 K 的数对数目
74 0
【位运算】【 数学】【 哈希映射】2857. 统计距离为 k 的点对
【位运算】【 数学】【 哈希映射】2857. 统计距离为 k 的点对
|
9月前
leetcode-592:分数加减运算
leetcode-592:分数加减运算
66 0
每日算法系列【LeetCode 829】连续整数求和
每日算法系列【LeetCode 829】连续整数求和
132 0
leetcode-829. 连续整数求和(数论)
这题求连续正整数,刚好满足等差数列,可以用等差数列求和公式 n = (i + (i + k)) * (k + 1) / 2 其中i是连续正整数的首项,k是尾项和首项的差值
138 0
leetcode-829. 连续整数求和(数论)
LeetCode 2006. 差的绝对值为 K 的数对数目
给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j 且 |nums[i] - nums[j]| == k 。
105 0
使用格里高利公式求π的近似值,要求精确到最后一项的绝对值小于10–4
使用格里高利公式求π的近似值,要求精确到最后一项的绝对值小于10–4
使用格里高利公式求π的近似值,要求精确到最后一项的绝对值小于10–4
L2-018 多项式A除以B (25 分)(数组模拟)
L2-018 多项式A除以B (25 分)(数组模拟)
195 0
L2-018 多项式A除以B (25 分)(数组模拟)

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等