public class Solution {
private int GCD(int a, int b)
{
return b != ? GCD(b, a % b) : a;
} private int LCM(int a, int b)
{
return a * b / GCD(a, b);
} public string FractionAddition(string expression)
{
var first = expression[];
var FU = true;//默认当前表达式为负
if (first != '-')
{
FU = false;//当前表达式为正
}
var listPOS = new List<string>();//记录正表达式
var listNev = new List<string>();//记录负表达式
//先将正表达式和负表达式分开 var sb = new StringBuilder();//记录当前表达式 for (int i = ; i < expression.Length; i++)
{
if (expression[i] == '-')
{
if (FU)
{
if (sb.Length > )
{
listNev.Add(sb.ToString());
}
}
else
{
if (sb.Length > )
{
listPOS.Add(sb.ToString());
}
}
FU = true;
sb.Clear();
}
else if (expression[i] == '+')
{
if (FU)
{
if (sb.Length > )
{
listNev.Add(sb.ToString());
}
}
else
{
if (sb.Length > )
{
listPOS.Add(sb.ToString());
}
}
FU = false;
sb.Clear();
}
else
{
sb.Append(expression[i]);
}
} if (FU)
{
if (sb.Length > )
{
listNev.Add(sb.ToString());
}
}
else
{
if (sb.Length > )
{
listPOS.Add(sb.ToString());
}
} var listPOSSP = new List<List<int>>();
foreach (var str in listPOS)
{
var ary = str.Split('/');
var tp = new List<int>();
tp.Add(int.Parse(ary[]));
tp.Add(int.Parse(ary[]));
listPOSSP.Add(tp);
} var listNEVSP = new List<List<int>>();
foreach (var str in listNev)
{
var ary = str.Split('/');
var tp = new List<int>();
tp.Add(int.Parse(ary[]));
tp.Add(int.Parse(ary[]));
listNEVSP.Add(tp);
} var lcm1 = ;
var sumPOS = ;
if (listPOSSP.Any())
{
if (listPOSSP.Count == )
{
lcm1 = listPOSSP[][];
}
else
{
lcm1 = listPOSSP[][];
for (int i = ; i < listPOSSP.Count; i++)
{
var curFM = listPOSSP[i][];
lcm1 = LCM(lcm1, curFM);
}
} for (int i = ; i < listPOSSP.Count; i++)
{
var FM = listPOSSP[i][];
var FZ = listPOSSP[i][];
var bs = lcm1 / FM;
FZ = FZ * bs;
sumPOS += FZ;
}
} var lcm2 = ;
var sumNEV = ;
if (listNEVSP.Any())
{
if (listNEVSP.Count == )
{
lcm2 = listNEVSP[][];
}
else
{
lcm2 = listNEVSP[][];
for (int i = ; i < listNEVSP.Count; i++)
{
var curFM = listNEVSP[i][];
lcm2 = LCM(lcm2, curFM);
}
} for (int i = ; i < listNEVSP.Count; i++)
{
var FM = listNEVSP[i][];
var FZ = listNEVSP[i][];
var bs = lcm2 / FM;
FZ = FZ * bs;
sumNEV += FZ;
}
} var lcm = LCM(lcm1, lcm2);
var bs1 = lcm / lcm1;
var bs2 = lcm / lcm2;
var fz1 = sumPOS * bs1;
var fz2 = sumNEV * bs2;
var fz = fz1 - fz2; var cc = GCD(fz, lcm);
if (cc < )
{
cc = cc * -;
}
var result = fz / cc + "/" + lcm / cc; return result;
}
}

https://leetcode.com/problems/fraction-addition-and-subtraction/#/description

05-11 20:55