当前位置:   article > 正文

给定一个表示分数加减表达式的字符串,需要以字符串格式返回计算结果。结果表达式也是分数式_给定一个表达式,求其分数计算结果

给定一个表达式,求其分数计算结果

本题源自leetcode  592

-----------------------------------------------------------------

思路: 1 求分数表达式,用istringstream 类读输入的表达式。

 2 求表达式的结果。

3 除以最大公约数(简化)

代码:

  1. string fractionAddition(string expression) {
  2. istringstream is(expression);
  3. int dvd = 0; //保存最终结果的分母
  4. int dis = 1; //保存最终结果的分子
  5. int a=0;
  6. int b=0;
  7. char op; //存操作符
  8. while(is >> a >> op >> b){
  9. dvd = dvd * b + dis * a;
  10. dis *= b;
  11. int g = abs(__gcd(dvd,dis)); //最大公约数
  12. dvd /= g;
  13. dis /= g;
  14. }
  15. return to_string(dvd) + '/' +to_string(dis);
  16. }

代码

  1. string fractionAddition(string s) {
  2. int p = 0, p1 = 0, p2 = 0;
  3. int n = 0, d = 1; //分母 和 分子
  4. if(s[0] != '-')
  5. s = "+" + s;
  6. int len = s.size();
  7. while(p < len){
  8. for(p1 = p + 1; s[p1] != '/'; ++p1);
  9. for(p2 = p1 + 1; p2 < len && s[p2] != '-' && s[p2] != '+'; ++p2);
  10. auto nn = stoi(s.substr(p + 1, p1 - p - 1)); //分母
  11. auto dd = stoi(s.substr(p1 + 1, p2 - 1 -p1)); //分子
  12. auto g = getGcd(d,dd);
  13. n = (n * dd) / g + ((s[p] == '-' ? -1 : 1) * nn * d) / g; //求和后的分母
  14. d = (d * dd) / g; //求和后的分子
  15. p = p2;
  16. }
  17. auto g = getGcd(abs(n),d);
  18. return to_string(n/g) + "/" + to_string(d/g);
  19. }
  20. int getGcd(int a,int b){
  21. return b==0 ? a : getGcd(b,a%b);
  22. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/889730
推荐阅读
相关标签
  

闽ICP备14008679号