【改错】 “Java约分” 的错误

问题遇到的现象和发生背景

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;
            }
运行结果及报错内容

只有一种特殊情况错误

img

我的解答思路和尝试过的方法

这种方法完全正确:

//约分
        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);
    }
我想要达到的结果

img

求最大公因数应该用辗转相除法,你后面贴的代码其实就是,不过它用的是递归,完全可以写个while循环不用这么费劲
按理说你的代码除了效率低点问题不大,但是你考虑过分子是负数的情况吗,如果分子是负数你的循环根本不走