希望大家帮我运行一下这个c++程序(编译没错误!可是执行出问题了)

来源:百度知道 编辑:UC知道 时间:2024/09/22 01:14:09
#include <iostream>
#include<cmath>
using namespace std;
long lcg(long m,long n);//求最大公约数
class fraction
{public:
long num;//分子
long den;//分母
fraction(long m=0,long n=0);//构造函数
fraction & standard();//分数最简化
fraction operator+(fraction f);//+的重载
fraction operator-(fraction f);
fraction operator*(fraction f);//*的重载
fraction operator/(fraction f);// /的重载
friend istream& operator >>(fraction& f,istream& is);//>>的重载
friend ostream& operator <<(fraction f,ostream& os);//<<的重载
};
long lcg(long m,long n)//求最大公约数的实现
{
long temp,r;
if (n<m)
{temp=n;
n=m;
m=temp;
}
while (m)
{r=n%m;
n=m;
m=r;
}
return n;
}
fraction &fraction:: standard()//标准化的实现
{

if(num*den<0)
{
num=-abs(num);
den=abs(den);}//保证分母恒为正
long g=lcg(num,den);
num/=g;
den/=g;
ret

问题是出在这里:
while (m)
{r=n%m;
n=m;
m=r;
}

我也解释不清楚为什么,似乎如果m和n同时为0在这里就过不去。解决的方法很简单,把默认构造函数里的n的值改成1就可以了。