首页 > 其他分享 >592. 分数加减运算(中)

592. 分数加减运算(中)

时间:2024-04-09 10:36:26浏览次数:23  
标签:分数 592 运算 示例 题解 加减 expression

目录

题目

  • 给定一个表示分数加减运算的字符串 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:
    def fractionAddition(self, expression: str) -> str:
        # 返回结果也需要是分数 只能进行分数运算
        i = 0
        n1, d1 = 0, 1
        while i<len(expression):
            # 读取符号
            i, sign = self.read_sign(i, expression)
            # 读取分子 
            i, n2 = self.read_number(i, expression)
            # 跳过‘/‘
            i+=1
            # 读取分母
            i, d2 = self.read_number(i, expression)
            # 计算 n1/d1 和 n2/d2 的结果; 要同时赋值
            d1, n1 = d1*d2, n1*d2+sign*d1*n2
        # 如果结果为零 分母=1, 否则约分
        if n1==0: 
            d1=1
        else:
            divisor = gcd(n1, d1)
            n1 = n1//divisor
            d1 = d1//divisor
        return str(n1)+'/'+str(d1)  

    def read_sign(self, i, expression):# 读取符号
        sign = -1 if expression[i]=='-' else 1
        if expression[i]=='-' or expression[i]=='+': 
            i+=1#读完符号后移动指针
        return i, sign
    def read_number(self, i, expression):# 读取分子/分母
        num = 0
        while i<len(expression) and expression[i].isdigit():
            num = num*10+int(expression[i])#读取的数有可能超过一位数
            i += 1
        return i, num
    def gcd(self, a, b):
        """辗转相除法找a和b的公因数"""
        while a%b:
            a, b = b, a%b
        return b

标签:分数,592,运算,示例,题解,加减,expression
From: https://www.cnblogs.com/lushuang55/p/18123317

相关文章

  • 今年考研是太卷了还是太水了,为什么分数线都高的离谱?
    25考研的备考形势,势必跟以前不一样了!有些人问,分数线那么高,是不是题目太水了?问的人肯定不是24考生。24的题,也就政治正常一点。其它的,英语难上热搜,数学难度空前,分数线不跌反涨?!往年的英语,最后用“定位法”“二分法”作文押题冲一冲刺,也许就行了,今年可能过不了线!往年的数学......
  • C++ [NOIP2009 普及组] 分数线划定
    文章目录一、题目描述[NOIP2009普及组]分数线划定题目描述输入格式输出格式样例#1样例输入#1样例输出#1提示二、参考代码一、题目描述[NOIP2009普及组]分数线划定题目描述世博会志愿者的选拔工作正在A市如火如荼的进行。为了选拔最合适的人才,A市对所......
  • 计算机实现加减乘除
    packagecom.zsk.scanner;importjava.util.Scanner;publicclassdemo{publicstaticvoidmain(String[]args){Scanners=newScanner(System.in);inta=0;intb=0;doubleresult=0;System.out.println("请输入第一个数");if(s.hasNextInt()){a=s.nextInt()......
  • 1078:求分数序列和
    1078:求分数序列和时间限制:1000ms      内存限制:65536KB提交数:60452   通过数: 42413【题目描述】有一个分数序列 q1/p1,q2/p2,q3/p3,q4/p4,q5/p5,其中q[i+1]=q[i]+p[i],p[i+1]=q[i],p[1]=1,q[1]=2,比如这个序列前6项分别是2/1,3/2,5/3,8/5,13/8,21/13。求......
  • 分数序列求和
    编程要求有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前n项之和的整数部分。n的值运行时通过键盘输入给定,并且n<=30.输出值只保留整数(不要四舍五入)效果如下:输入:20.输出:32代码序列的分子是斐波那契数列,通过递归可以求解。代码中用m数组保存f(1),f(2),…......
  • 部分数据类型的内置方法及字符串内置方法
    昨日内容回顾【一】循环结构【1】while循环break:退出当前循环coutinue:退出本次循环tag:标志位,可以通过最里层的标志位直接将最外层的while循环断掉【2】for循环遍历可迭代类型(可以被索引取值的都可以被迭代,可一个个取值的就是可迭代的)遍历的意思就是将被需要遍历的......
  • gbase8s数据表级别的同步(部分数据的下发等功能)一
    一、ER的部署(一)环境检查1.操作系统环境检查虚拟机是centos进行虚拟出来的测试机[root@node01install]#uname-aLinuxnode013.10.0-1160.71.1.el7.x86_64#1SMPTueJun2815:37:28UTC2022x86_64x86_64x86_64GNU/Linux2.数据库部署信息检查服务器名称服......
  • 【Python】反转数字(整数、百分数、小数、分数)
    (本人蒟蒻,dalao勿喷)需要代码往下翻,最后的代码最简洁喔~题设:'''给定一个数,请将该数各个位上数字反转得到一个新数。整数反转是将所有数位对调。小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小数部分。分数反转是把分母的数反转,再把分子的数反转,不交换......
  • pg的计算百分数的问题
    SELECTcast("dept_id"asvarchar(32)),cast("dept_name"asvarchar(30))AS"病区","total_surgical_patients"AS"手术总数","total_preop_medication_patients"AS"用药总数",......
  • JS 日期计算 天数加减、月数加减
    JS日期计算天数加减、月数加减addDays(date,days){//给指定日期增加天数if(!days){returndate;}letdateArr=date.split('');date=newDate(newDate(date).setDate(newDate(date).getDate()+days));varyear=date.getFu......