LeetCode 592. 分数加减运算(字符串+最大公约数)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 592. 分数加减运算(字符串+最大公约数)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1. 題目
給定一個表示分數(shù)加減運算表達式的字符串,你需要返回一個字符串形式的計算結(jié)果。
這個結(jié)果應(yīng)該是不可約分的分數(shù),即最簡分數(shù)。
如果最終結(jié)果是一個整數(shù),例如 2,你需要將它轉(zhuǎn)換成分數(shù)形式,其分母為 1。
所以在上述例子中, 2 應(yīng)該被轉(zhuǎn)換為 2/1。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/fraction-addition-and-subtraction
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
2. 解題
class Solution { public:string fractionAddition(string expression) {bool positive = true, founddown = false;int up = 0, down = 0, a = 0, b = 0;for(int i = 0; i < expression.size(); ++i){if(expression[i] == '+'){add(up,down,a,b,positive);positive = true;founddown = false;//找到分母a=b=0;}else if(expression[i] == '-'){add(up,down,a,b,positive);positive = false;founddown = false;a=b=0;}else if(expression[i] == '/')founddown = true;else{if(founddown)b = b*10+expression[i]-'0';elsea = a*10+expression[i]-'0';}}add(up,down,a,b,positive);return to_string(up)+"/"+to_string(down);}void add(int &up, int &down, int a, int b, bool positive){if(down == 0 && b == 0)return;if(down == 0 && b != 0){up = positive?a:-a, down = b;return;}int t_up = 0, t_down = down*b;t_up += up*b + (positive?a:-a)*down;//交叉相乘int g = gcd(abs(t_up), t_down);//最大正公約數(shù)up = t_up/g;down = t_down/g;}int gcd(int a, int b){int r;while(b){r = a%b;a = b;b = r;}return a;} };0 ms 6.3 MB
總結(jié)
以上是生活随笔為你收集整理的LeetCode 592. 分数加减运算(字符串+最大公约数)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode MySQL 597.
- 下一篇: LeetCode 第 197 场周赛(4