LC-592 分数加减

主要问题:

输入一个分数加减的字符串,进行计算并输出分数

 

主要思路:

对字符串分割出每一个分数(包含符号),然后用两个vector来分别存分子和分母。

解析字符串后,对所有分母找他们的最小公倍数,然后对分子进行相应的加倍后加减,算出总和。

最后计算分子总和与分母最小公倍数的最大公约数,进行化简,输出答案。

 

代码:

 1 class Solution {
 2 public:
 3     int gcd(int a, int b) {
 4         if(b) while((a %= b) && (b %= a));
 5         return a + b;
 6     }
 7     
 8     int lcm(int a, int b){
 9         return (a * b) / gcd(a, b);
10     }
11     
12     string fractionAddition(string expression) {
13         vector<int> numerator, denominator;
14         bool flag = false;
15         while (!expression.empty()) {
16             int index;
17             for (index = 0; index < expression.length(); index++) {
18                 if (index != 0 && (expression[index] == '+' || expression[index] == '-')) {
19                     break;
20                 }
21             }
22             string fraction = expression.substr(0, index);
23             expression.erase(0, index);
24             int split = fraction.find('/');
25             string num = fraction.substr(0, split);
26             string deno = fraction.substr(split + 1);
27             numerator.push_back(stoi(num));
28             denominator.push_back(stoi(deno));
29         }
30         int lcm_num = denominator[0];
31         for (int i = 1; i < denominator.size(); i++) {
32             int temp = lcm(lcm_num, denominator[i]);
33             if (temp > lcm_num) lcm_num = temp;
34         }
35         int sum = 0;
36         for (int i = 0; i < numerator.size(); i++) {
37             numerator[i] = numerator[i] * (lcm_num / denominator[i]);
38             sum += numerator[i];
39         }
40         int gcd_num = gcd(abs(sum), lcm_num);
41         string answer = to_string(sum / gcd_num) + "/" + to_string(lcm_num / gcd_num);
42         return answer;
43     }
44 };

 

posted @ 2019-01-07 15:32  leo_lee  阅读(184)  评论(0编辑  收藏  举报