入门力扣自学笔记105 C++ (题目编号592)

592. 分数加减运算

题目:

给定一个表示分数加减运算的字符串 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"


提示:

输入和输出字符串只包含 '0' 到 '9' 的数字,以及 '/', '+' 和 '-'。 
输入和输出分数格式均为 ±分子/分母。如果输入的第一个分数或者输出的分数是正数,则 '+' 会被省略掉。
输入只包含合法的最简分数,每个分数的分子与分母的范围是  [1,10]。 如果分母是1,意味着这个分数实际上是一个整数。
输入的分数个数范围是 [1,10]。
最终结果的分子与分母保证是 32 位整数范围内的有效整数。


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


思路:

1.首先对字符串处理,取出每一个数的fm和fz。(其中数前面的符号属于当前数的fz)
2.同时用最大公约数计算函数LCM计算分母的最大公倍数mm.
3.于是遍历每个数,fz的值乘以(mm/当前数分母的倍数k)然后相加得到mz。
4.然后再进行约分,即用最小公倍数函数GCD计算mm和mz的倍数k,同除倍数即可。
5.最后转为字符串输出即可。


代码:

class Solution {
public:
    typedef int long long;
    vectorfm,fz;
    int n,flag=1,mm = 1,mz = 0;
    string res;
        string fractionAddition(string exp) {
            n = exp.size();
            for(int i = 0; i < n; i ++){
                if(exp[i] == '+') flag = 1;
                else if(exp[i] == '-') flag = -1;
                else if(exp[i] == '/'){
                    int z = exp[i-1] -'0',m = exp[i+1] -'0';
                    if(i-2>=0&&exp[i-2]=='1') z = 10; 
                    if(i+2

你可能感兴趣的:(力扣算法学习,leetcode,算法,c++)