题目
给定一个表示分数加减运算的字符串 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"
解题
方法一:模拟
class Solution { public: string fractionAddition(string expression) { long long a=0,b=1;//分子,分母 int index=0,n=expression.size(); while(index<n){ //读取正负符号 int sign=1;//如果没有遇到符号,默认正的 if(expression[index]=='+'||expression[index]=='-'){ sign=expression[index]=='+'?1:-1; index++; } //读取分子 long long a1=0; while(isdigit(expression[index])){ a1=a1*10+expression[index]-'0'; index++; } index++;//跳过'/' //读取分母 long long b1=0; while(isdigit(expression[index])){ b1=b1*10+expression[index]-'0'; index++; } a1=a1*sign; a=a*b1+a1*b; b=b*b1; } if(a==0) return "0/1"; long long g=gcd(abs(a),b);//获取最大公约数 return to_string(a/g)+"/"+to_string(b/g); } };