展开全部
更多追问追答
追答
for(int i=0; i<Size; i++)
{
if((F.dn%arr[i]==0)&&(F.nr%arr[i]==0))
{
F.dn /= arr[i];
F.nr /= arr[i];
i = -1; //如果进行了约分,则从头开始
}
}
这样就可以有了约分就从头遍历。
但是遍历数组这种方法是行不通的。比如如果计算结果为47/2209,你又没办法约分了,因为你的数组没有包含47。要使得所有数据都能约分,你就得使数组包含所有质数,然而这是不可能的(因为质数有无限个)。所以建议你放弃使用此方法实现约分。porker2008的方法是完美的,分子分母都除以它们的最大公约数就完成了约分。
展开全部
static int greatest_common_divisor(int a, int b) {
int c;
while (b != 0) {
c = a % b;
a = b;
b = c;
}
return a;
}
Fraction Fraction::operator+(const Fraction& Frac) const {
Fraction F;
int cd = greatest_common_divisor(dn, Frac.dn);
F.dn = dn / cd * Frac.dn;
F.nr = Frac.nr * (F.dn / Frac.dn) + nr * (F.dn / dn);
cd = greatest_common_divisor(F.dn, F.nr);
if (cd > 1) {
F.dn /= cd;
F.nr /= cd;
}
return F;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询