关于Rational类的约分
问题描述:
老师好!
我的理解这里约分其实就是求分子和分母的最大公约数,然后让分子分母同除最大公约数即可。经典的数论问题了,用辗转相除法可以求出最大公约数。
如果还有其它方法,或者更工程化的方法,还请老师批评指正~
相关代码:
int gcd(int x, int y) {
return y ? gcd(y, x%y) : x;
}
11
收起
正在回答
1回答
是的。这里可以使用求最大公约数的方法进行约分。求最大公约数最简单的方式就是使用欧几里得的辗转相除法。但是你这里的gcd有几个明显的缺陷:首先这里一般来说x是需要大于y的,你没有做判断;再者这里的x%y效率比较低,可以有优化算法;并且使用递归来实现这个有天然的缺陷,递归层数不能太深。这方面有待修正和优化。加油。
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星