赞
踩
本题源自leetcode 592
-----------------------------------------------------------------
思路: 1 求分数表达式,用istringstream 类读输入的表达式。
2 求表达式的结果。
3 除以最大公约数(简化)
代码:
string fractionAddition(string expression) { istringstream is(expression); int dvd = 0; //保存最终结果的分母 int dis = 1; //保存最终结果的分子 int a=0; int b=0; char op; //存操作符 while(is >> a >> op >> b){ dvd = dvd * b + dis * a; dis *= b; int g = abs(__gcd(dvd,dis)); //最大公约数 dvd /= g; dis /= g; } return to_string(dvd) + '/' +to_string(dis); }
string fractionAddition(string s) { int p = 0, p1 = 0, p2 = 0; int n = 0, d = 1; //分母 和 分子 if(s[0] != '-') s = "+" + s; int len = s.size(); while(p < len){ for(p1 = p + 1; s[p1] != '/'; ++p1); for(p2 = p1 + 1; p2 < len && s[p2] != '-' && s[p2] != '+'; ++p2); auto nn = stoi(s.substr(p + 1, p1 - p - 1)); //分母 auto dd = stoi(s.substr(p1 + 1, p2 - 1 -p1)); //分子 auto g = getGcd(d,dd); n = (n * dd) / g + ((s[p] == '-' ? -1 : 1) * nn * d) / g; //求和后的分母 d = (d * dd) / g; //求和后的分子 p = p2; } auto g = getGcd(abs(n),d); return to_string(n/g) + "/" + to_string(d/g); } int getGcd(int a,int b){ return b==0 ? a : getGcd(b,a%b); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。