给定一个表示分数加减运算的字符串 expression ,你需要返回一个字符串形式的计算结果。
这个结果应该是不可约分的分数,即最简分数。 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母为 1。所以在上述例子中, 2 应该被转换为 2/1。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/fraction-addition-and-subtraction
跪了orz.题目不难,关键是如何实现。
分数运算->通分。
化简结果->分子分母同除最大公约数。
需要注意的点:
1.字符转换为数字
int a='1'-0; //a=1
2.C++ 函数的使用
string类 :求字符串长度: expression.size()
判断一个字符是否为数字:isdigit()
求最大公约数:gcd()
数字转化为字符串:tostring()
- class Solution {
- public:
- string fractionAddition(string expression) {
- int fz=0,fm=1;//分子,分母
- int index=0,n=expression.size();
- while(index
- int fz1=0,sign=1;
- //读入分子,符号位
- if(expression[index]=='-' || expression[index]=='+'){
- sign=expression[index++]=='-'?-1:1;
- }
- while(index
isdigit(expression[index])){ - fz1=fz1*10+expression[index++]-'0';
- }
- fz1=sign*fz1;
- index++;
- //读分母
- int fm1=0;
- while(index
isdigit(expression[index])){ - fm1=fm1*10+expression[index++]-'0';
- }
- //利用通分计算一次结果
- fz=fz*fm1+fz1*fm;
- fm=fm*fm1;
- }
- if(fz==0){
- return"0/1";
- }
- //约分
- int common_part=gcd(abs(fz),fm);
- return to_string(fz/common_part)+"/"+to_string(fm/common_part);
- }
- };