2016-04-18 21 views
-1

私はFractionという名前のクラスを持ち、クラスの外側では、基数を得るために関数baseFを使用します。基本分数を取得しようとするとランタイムエラーが発生する

void Fraction::baseF() { 
    int n=num,d=den,i; 
    if(n<d) { 
    for(i=0;i<n;i++) 
     if(n%i==0 & d%i==0) {n/=i;d/=i;} 
    } //end if 
    else { 
    for(i=0;i<d;i++) 
     if(n%i==0 & d%i==0) {n/=i;d/=i;} 
    } //end else 
    num=n; 
    den=d; 
} 

私はコードが効率的ではなく、単にロジックを取得しようとしていることを知っています。

+0

あなたはかなり多くゼロで割っています。 2つよりも少ない分割可能性をテストする必要はありません。 – molbdnilo

+0

2つの 'for'ループの違いは何ですか? (それらは同じであるので、 'else'節を取り除きます)。 –

+0

ちなみに、* bitwiseとoperator&*の代わりに**論理AND演算子&& **を使用することができます。 –

答えて

1

あなたが持っている:ループの最初の繰り返しで

for(i=0;i<n;i++) 
    if(n%i==0 & d%i==0) {n/=i;d/=i;} 

は、iの値がゼロです。 iがゼロの場合、n%iを計算することは問題です。

また、n%i==0 & d%i==0はタイプミスのようです。おそらくn%i==0 && d%i==0(ビット単位のAND論理とVS)意味

あなたは使用することもできます。

for(i=1; i<n; i++) 
    if(n%i==0 && d%i==0) {n/=i;d/=i;} 

両方forループで修正を行います。

+1

また、'& 'は' && 'に置き換えてください。 –

関連する問題