问题遇到的现象和发生背景
PTA天梯赛第九题,需要约分
问题相关代码,请勿粘贴截图
boolean f = false; //f判断是否有公因数,gg为最大公因数,Zi为分子(已确认不为0),Mu为分母
long gg=0;
for (long i = 2; i <= resZi; i++) {
if (resZi % i == 0 && resMu % i == 0) {
gg=i;
f = true;
}
}
if (f) {
resZi /= gg;
resMu /= gg;
}
运行结果及报错内容
只有一种特殊情况错误
我的解答思路和尝试过的方法
这种方法完全正确:
//约分
long gg =gcd(Math.abs(resZi), Math.abs(resMu));// 分子为0不需要约分
resZi /= gg;
resMu /= gg;
······
private static long gcd(long nfz, long nfm) {
long a = Math.min(nfz, nfm);
long b = Math.max(nfz, nfm);
if (b % a == 0) {
return a;
}
return gcd(a, b % a);
}