益阳做网站的公司,如何搜索网站的内容,广州建站哪个济南兴田德润实惠吗,佛山网站排名提升1. 题目
给定一个表示分数加减运算表达式的字符串#xff0c;你需要返回一个字符串形式的计算结果。 这个结果应该是不可约分的分数#xff0c;即最简分数。 如果最终结果是一个整数#xff0c;例如 2#xff0c;你需要将它转换成分数形式#xff0c;其分母为 1。 所以在…1. 题目
给定一个表示分数加减运算表达式的字符串你需要返回一个字符串形式的计算结果。 这个结果应该是不可约分的分数即最简分数。 如果最终结果是一个整数例如 2你需要将它转换成分数形式其分母为 1。 所以在上述例子中, 2 应该被转换为 2/1。
示例 1:
输入:-1/21/2
输出: 0/1示例 2:
输入:-1/21/21/3
输出: 1/3示例 3:
输入:1/3-1/2
输出: -1/6示例 4:
输入:5/31/3
输出: 2/1说明:
输入和输出字符串只包含 0 到 9 的数字以及 /, 和 -。
输入和输出分数格式均为 ±分子/分母。
如果输入的第一个分数或者输出的分数是正数则 会被省略掉。
输入只包含合法的最简分数每个分数的分子与分母的范围是 [1,10]。
如果分母是1意味着这个分数实际上是一个整数。
输入的分数个数范围是 [1,10]。
最终结果的分子与分母保证是 32 位整数范围内的有效整数。来源力扣LeetCode 链接https://leetcode-cn.com/problems/fraction-addition-and-subtraction 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 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;//找到分母ab0;}else if(expression[i] -){add(up,down,a,b,positive);positive false;founddown false;ab0;}else if(expression[i] /)founddown true;else{if(founddown)b b*10expression[i]-0;elsea a*10expression[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);//最大正公约数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