Leetcode 592. 分数加减运算

题目

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

测试样例

示例 1:

输入:"-1/2+1/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位整数范围内的有效整数。

题解

模拟
先找分母的最小公倍数,然后变换使两个分数的分母相同,分子进行加减,然后再求分子分母的最大公约数,进行通分。详细过程见代码

代码

 int minGBS(int a,int b){        //找两个数的最小公倍数return a*b/maxGYS(a,b);}int maxGYS(int a,int b){        //利用辗转相除法求两个数的最大公约数if(a < b)   swap(a,b);int c;while(b != 0){c = a%b;a = b;b = c;}return a;} pair<int,int> addFraction(pair<int,int> one,pair<int,int> two){       //两个分式进行加减int second = minGBS(one.second,two.second);      //利用最小公倍数统一分母int first = one.first*(second/one.second) + two.first*(second/two.second);       //分子变换后进行加减if(first == 0)  return make_pair(0,1);int isNegtive = 1;if(first < 0){isNegtive = -1;first *= -1; }int YS = maxGYS(first,second);       //求分子分母的最大公约数以便实现通分return make_pair(isNegtive*first/YS,second/YS);}string fractionAddition(string expression) {stack<pair<int,int>> sp;int i=0,n = expression.length();bool isNegtive = false;while(i < n){if(expression[i] == '-')    isNegtive = true;     //我们将减号看成第二个分数的负号,从而将加减法统一为加法else if(expression[i] == '+')   isNegtive = false;else{int first=0,second=0;while(expression[i] != '/'){first = first*10 + expression[i]-'0';i++;}if(isNegtive)   first *= -1;i++;while(i<n && expression[i] != '+' && expression[i]!='-'){second = second*10 + expression[i]-'0';i++;}if(sp.empty())  sp.push(make_pair(first,second));else{pair<int,int> conclude = addFraction(sp.top(),make_pair(first,second));sp.pop();sp.push(conclude);}i--;}i++;}return to_string(sp.top().first) + "/" + to_string(sp.top().second);}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fraction-addition-and-subtraction
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

Leetcode 592. 分数加减运算 C++相关推荐

  1. LeetCode 592. 分数加减运算(字符串+最大公约数)

    1. 题目 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母 ...

  2. 图解LeetCode——592. 分数加减运算(难度:中等)

    一.题目 给定一个表示分数加减运算的字符串 expression,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即:最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成 ...

  3. LeetCode 0592. 分数加减运算:手把手分步のC++讲解

    [LetMeFly]592.分数加减运算:手把手分步のC++讲解 力扣题目链接:https://leetcode.cn/problems/fraction-addition-and-subtracti ...

  4. 592.分数加减运算 纯纯的数学题,Python 7行代码+详细思路分享!

    592.分数加减运算 https://leetcode.cn/problems/fraction-addition-and-subtraction/solution/by-qingfengpython ...

  5. 【leetcode】592.分数加减运算(python)

    目录 一.题目描述 二.解题思路 2.1 查找 '/' 所在位置(第一思路) 2.2 利用python中分数表达Fraction函数 2.2.1 Fraction函数介绍 2.2.2 解题 2.3 类 ...

  6. leetcode 592. Fraction Addition and Subtraction | 592. 分数加减运算(最大公因数gcd,最小公倍数lcm)

    题目 https://leetcode.com/problems/fraction-addition-and-subtraction/ 题解 这题既简单又麻烦,一道 hard 的 easy 题,被划分 ...

  7. JAVA程序设计:分数加减运算(LeetCode:592)

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

  8. LeetCode中等题之分数加减运算

    题目 给定一个表示分数加减运算的字符串 expression ,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数 ...

  9. leetcode_592. 分数加减运算

    问题描述: 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母 ...

最新文章

  1. loadrunner关联点总结
  2. Linux入门第四集!Jar包的入门、使用、部署!怎么打Jar包?
  3. gson 自定义对象转换格式
  4. C++语言之一个派生类继承了所有的基类方法,但下列情况除外
  5. 深度学习(四十三)——深度强化学习(6)AlphaGo全系列
  6. 22、多进程和多线程
  7. 流程平台:子表控件(二) - 属性、事件、方法
  8. python代码风格检查工具──pylint
  9. “动态规划”这词太吓人,其实可以叫“状态缓存”
  10. JAVA软件项目研发流程
  11. python 预测 位置_Python:核岭回归预测,KRR
  12. Win10的WSL很好用呀
  13. 几种有趣的Magic Matrix
  14. vscode插件版本的选择与安装
  15. 今日做题家 - 面试算法题教程系列总纲
  16. 软考真题———2018上
  17. Ubuntu安装谷歌拼音输入法/搜狗拼音输入法
  18. vscode 提示 vetur can‘t find `tsconfig.json`的解决办法
  19. Accumulation Degree
  20. 即有集团:品牌化运作成为集团发展“新基因”

热门文章

  1. Html5 获取手机短信号码
  2. 2022东南大学网安916专硕上岸经验帖
  3. 云服务AppId或AppKey和AppSecret生成策略(对外接口使用)
  4. 51nod - 1204 Parity
  5. qLabel 字体大小不受控制
  6. Verilog轮询仲裁器设计——Round Robin Arbiter
  7. 数据结构溢彩加强版——(二)算法篇
  8. 东京大学招生海报上的那些事(下)
  9. Java编程思想第五版(On Java8)(四)-运算符
  10. 专业人士告诉你数据分析师适合女生吗?