- 问题又来了。。。bryant1976学长错在最后几句{no=mo
- 错在最后几句
{
no= mo;
mo= no% mo;
return fun2(c);
}
应该改为
{
Franctn d;
no = mo;
mo = no% mo;
return fun2(d);
}
既然要用辗转相除法来求最大公约数,就要严格保证输入参数的值不能弄错。
另外,程序中最好加入一些特殊情况的判断,如 mo不能为零,而如果两个数相等,则会出现分子为零的情况。
为什么要重新定义另一个变量d(Franction d;),我不明。
我照此修改我的程序,用2/3减去6/5时,程
- 程序必须加负数的判断,为了保证进行比较的都是正数,干脆只比较绝对值。修改如下:
int fun2(Franction c)
{
mo = abs( mo);
no = abs( no); //只比较绝对值
if( mo> no)
{
int temp= mo;
mo= no;
no=temp;
}
...
}
至于为什么用Franction d;自己调试跟踪一下就明白了。如果按照你原来程序的写法,当执行完 no= mo;后再执行 mo= no% mo时由于 no= mo,结果当然是 mo=0了,这显然是错误的。