Leetcode 592. 分数加减运算 C++
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"
说明:
- 输入和输出字符串只包含 ‘0’ 到 ‘9’ 的数字,以及 ‘/’, ‘+’ 和 ‘-’。
- 输入和输出分数格式均为±分子/分母。如果输入的第一个分数或者输出的分数是正数,则 ‘+’ 会被省略掉。
- 输入只包含合法的最简分数,每个分数的分子与分母的范围是[1,10]。 如果分母是1,意味着这个分数实际上是一个整数。
- 输入的分数个数范围是 [1,10]。
- 最终结果的分子与分母保证是 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++相关推荐
- LeetCode 592. 分数加减运算(字符串+最大公约数)
1. 题目 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母 ...
- 图解LeetCode——592. 分数加减运算(难度:中等)
一.题目 给定一个表示分数加减运算的字符串 expression,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即:最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成 ...
- LeetCode 0592. 分数加减运算:手把手分步のC++讲解
[LetMeFly]592.分数加减运算:手把手分步のC++讲解 力扣题目链接:https://leetcode.cn/problems/fraction-addition-and-subtracti ...
- 592.分数加减运算 纯纯的数学题,Python 7行代码+详细思路分享!
592.分数加减运算 https://leetcode.cn/problems/fraction-addition-and-subtraction/solution/by-qingfengpython ...
- 【leetcode】592.分数加减运算(python)
目录 一.题目描述 二.解题思路 2.1 查找 '/' 所在位置(第一思路) 2.2 利用python中分数表达Fraction函数 2.2.1 Fraction函数介绍 2.2.2 解题 2.3 类 ...
- leetcode 592. Fraction Addition and Subtraction | 592. 分数加减运算(最大公因数gcd,最小公倍数lcm)
题目 https://leetcode.com/problems/fraction-addition-and-subtraction/ 题解 这题既简单又麻烦,一道 hard 的 easy 题,被划分 ...
- JAVA程序设计:分数加减运算(LeetCode:592)
给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母为 1.所以 ...
- LeetCode中等题之分数加减运算
题目 给定一个表示分数加减运算的字符串 expression ,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数 ...
- leetcode_592. 分数加减运算
问题描述: 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母 ...
最新文章
- loadrunner关联点总结
- Linux入门第四集!Jar包的入门、使用、部署!怎么打Jar包?
- gson 自定义对象转换格式
- C++语言之一个派生类继承了所有的基类方法,但下列情况除外
- 深度学习(四十三)——深度强化学习(6)AlphaGo全系列
- 22、多进程和多线程
- 流程平台:子表控件(二) - 属性、事件、方法
- python代码风格检查工具──pylint
- “动态规划”这词太吓人,其实可以叫“状态缓存”
- JAVA软件项目研发流程
- python 预测 位置_Python:核岭回归预测,KRR
- Win10的WSL很好用呀
- 几种有趣的Magic Matrix
- vscode插件版本的选择与安装
- 今日做题家 - 面试算法题教程系列总纲
- 软考真题———2018上
- Ubuntu安装谷歌拼音输入法/搜狗拼音输入法
- vscode 提示 vetur can‘t find `tsconfig.json`的解决办法
- Accumulation Degree
- 即有集团:品牌化运作成为集团发展“新基因”